1、概述
2、Spring持久层
样例:
Sort.java
package com.ljb.entity;public class Sort { private int id; private String sortName; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSortName() { return sortName; } public void setSortName(String sortName) { this.sortName = sortName; }}
ISortDao.java
package com.ljb.dao;import com.ljb.entity.Sort;public interface ISortDao { public Sort findById(Integer id);}
SortDaoImpl.java
package com.ljb.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.sql.DataSource;import com.ljb.entity.Sort;public class SortDaoImpl implements ISortDao { private DataSource dataSource; public DataSource getDataSource() { return dataSource; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } @Override public Sort findById(Integer id) { Connection conn= null; PreparedStatement ps = null; ResultSet rs = null; try { conn = dataSource.getConnection(); ps = conn.prepareStatement("select * from es_sort where id=?"); ps.setInt(1, id); rs = ps.executeQuery(); Sort sort = new Sort(); if (rs.next()) { sort.setId(rs.getInt("id")); sort.setSortName(rs.getString("sortname")); } return sort; } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } return null; }}
applicationContext.xml
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/shopping root root
Test.java
package com.ljb.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ljb.dao.ISortDao;import com.ljb.entity.Sort;public class Test { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); ISortDao sortDao = (ISortDao)context.getBean("sortDao"); Sort sort = sortDao.findById(2); System.out.println("编号"+ sort.getId() + "类名"+ sort.getSortName()); }}
执行结果:
编号2类名玩具类
3、JDBCTemplate
JdbcTemplateSortDaoImpl.java
package com.ljb.dao;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.sql.DataSource;import org.springframework.jdbc.core.JdbcTemplate;import com.ljb.entity.Sort;public class JdbcTemplateSortDaoImpl implements ISortDao { private JdbcTemplate jdbcTemplate; /** * 注入数据源,创建JdbcTemplate * @param dataSource */ public void setDataSource(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } @Override public Sort findById(Integer id) { List sortMapList = jdbcTemplate.queryForList("select * from es_sort where id="+id.intValue()); for (Iterator
applicationContext.xml
Test.java
package com.ljb.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ljb.dao.ISortDao;import com.ljb.entity.Sort;public class Test { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); ISortDao sortDao = (ISortDao)context.getBean("sortDao"); Sort sort = sortDao.findById(3); System.out.println("编号"+ sort.getId() + "类名"+ sort.getSortName()); }}
执行结果:
编号3类名手机‘苹果’类
JdbcTemplateSortDaoImpl.java
@Override public void add(Sort sort) { jdbcTemplate.update("insert into es_sort values (?,?)",new Object[]{sort.getId(),sort.getSortName()}); }
Test.java
package com.ljb.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ljb.dao.ISortDao;import com.ljb.entity.Sort;public class Test { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); ISortDao sortDao = (ISortDao)context.getBean("sortDao");// Sort sort = sortDao.findById(3);// System.out.println("编号"+ sort.getId() + "类名"+ sort.getSortName()); Sort sort = new Sort(); sort.setId(7); sort.setSortName("玻璃制品"); sortDao.add(sort); }}
TestBatch.java
package com.ljb.test;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import javax.sql.DataSource;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jdbc.core.BatchPreparedStatementSetter;import org.springframework.jdbc.core.JdbcTemplate;public class TestBatch { public static int count = 20; /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); DataSource dataSource = (DataSource) context.getBean("dataSource"); JdbcTemplate jt = new JdbcTemplate(dataSource); String create_sql = "create table if not exists person(id int(10) primary key auto_increment,name varchar(20))"; jt.execute(create_sql); System.out.println("执行完毕"); String batch_sql = "insert into person values(?,?)"; final List ids = new ArrayList(); final List names = new ArrayList(); for (int i = 0 ; i < count; i++ ) { ids.add(i+1); names.add("name"+(i+1)); } BatchPreparedStatementSetter bps = new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int index) throws SQLException { ps.setInt(1, (Integer)ids.get(index)); ps.setString(2, (String)names.get(index)); } @Override public int getBatchSize() { return count; } }; jt.batchUpdate(batch_sql, bps); }}
4、JdbcTemplate以对象方式操作数据库
样例:
PersonFunction.java
package com.ljb.jdbc.object;import javax.sql.DataSource;import org.springframework.jdbc.object.SqlFunction;public class PersonFunction extends SqlFunction
PersonQuery.java
package com.ljb.jdbc.object;import java.sql.ResultSet;import java.sql.SQLException;import javax.sql.DataSource;import org.springframework.jdbc.object.MappingSqlQuery;import com.ljb.entity.Person;public class PersonQuery extends MappingSqlQuery
PersonUpdate.java
package com.ljb.jdbc.object;import java.sql.Types;import javax.sql.DataSource;import org.springframework.jdbc.object.SqlUpdate;public class PersonUpdate extends SqlUpdate { public PersonUpdate (DataSource ds) { super(ds,"insert into person values(?,?)"); int[] types = {Types.INTEGER,Types.VARCHAR}; setTypes(types); compile(); }}
IPersonDao.java
package com.ljb.jdbc.object.dao;import java.util.List;import com.ljb.entity.Person;public interface IPersonDao { public List findAll (); public void update (Person p); public int getCount();}
ObjectJdbcTemplatePersonDaoImpl.java
package com.ljb.jdbc.object.dao;import java.util.List;import javax.sql.DataSource;import com.ljb.entity.Person;import com.ljb.jdbc.object.PersonFunction;import com.ljb.jdbc.object.PersonQuery;import com.ljb.jdbc.object.PersonUpdate;public class ObjectJdbcTemplatePersonDaoImpl implements IPersonDao { private PersonFunction pf; private PersonQuery pq; private PersonUpdate pu; public void setDataSource (DataSource ds) { pf = new PersonFunction(ds); pq = new PersonQuery(ds); pu = new PersonUpdate(ds); } @Override public List findAll() { return pq.execute(); } @Override public void update(Person p) { pu.update(new Object[]{p.getId(),p.getName()}); } @Override public int getCount() { return pf.run(); }}
TestObject.java
package com.ljb.jdbc.object.test;import java.util.Iterator;import java.util.List;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ljb.entity.Person;import com.ljb.jdbc.object.dao.IPersonDao;public class TestObject { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); IPersonDao personDao = (IPersonDao) context.getBean("personDao"); List persons = personDao.findAll(); Person p = new Person(); p.setId(21); p.setName("jdbc操作对象"); personDao.update(p); System.out.println("记录总数:"+personDao.getCount()); for (Iterator it = persons.iterator();it.hasNext();) { Person temp = (Person) it.next(); System.out.println("编号:"+temp.getId()+",姓名:"+temp.getName()); } }}
applicationContext.xml
执行结果:
记录总数:21
编号:1,姓名:name1编号:2,姓名:name2编号:3,姓名:name3编号:4,姓名:name4编号:5,姓名:name5编号:6,姓名:name6编号:7,姓名:name7编号:8,姓名:name8编号:9,姓名:name9编号:10,姓名:name10编号:11,姓名:name11编号:12,姓名:name12编号:13,姓名:name13编号:14,姓名:name14编号:15,姓名:name15编号:16,姓名:name16编号:17,姓名:name17编号:18,姓名:name18编号:19,姓名:name19编号:20,姓名:name20数据库: