Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)
一、知识点回顾
1、Mybatis环境搭建(DAO层的实现)(使用maven项目管理工具)
需要引入的依赖包:
<dependency> <groupId>junitgroupId> <artifactId>junitartifactId> <version>4.3version> <scope>testscope> dependency> <dependency> <groupId>log4jgroupId> <artifactId>log4jartifactId> <version>1.2.17version> dependency> <dependency> <groupId>org.mybatisgroupId> <artifactId>mybatisartifactId> <version>3.2.2version> dependency> <dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>5.1.43version> dependency>
核心配置文件:configuration.xml
<?xml version="1.0" encoding="UTF-8" ?> DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="database.properties">properties> <typeAliases> <package name="cn.tengyu.entity"/> typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> dataSource> environment> environments> <mappers> <package name="cn.tengyu.dao"/> mappers> configuration>
Mapper.xml
<?xml version="1.0" encoding="UTF-8"?> DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.tengyu.dao.DeptMapper"> <select id="count" resultType="int"> SELECT count(1) as count FROM dept select> <select id="findAll" resultType="Dept"> SELECT * FROM dept select> <select id="findByName" resultType="Dept" parameterType="String"> SELECT * FROM dept WHERE deptname=#{deptname} select> <resultMap id="empList" type="Emp"> <id property="empno" column="empno"/> resultMap> <select id="findByDeptName" parameterType="String" resultMap="empList"> SELECT emp.* FROM emp,dept WHERE dept.deptno=emp.deptno AND deptname like concat ('%',#{detname},'%') select> <insert id="addDeptByName" parameterType="string"> INSERT INTO dept(deptname)VALUES (#{deptname}) insert> <insert id="addDept" parameterType="Dept"> INSERT INTO dept(deptno,deptname)VALUES (#{deptno},#{deptname}) insert> <delete id="delDept" parameterType="int"> DELETE FROM dept WHERE deptno=#{deptno} delete> <update id="modifyDept" parameterType="string"> UPDATE dept SET deptname=#{newdeptname} WHERE deptname=#{deptname} update> mapper>
MybatisUtil.java
import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUtil { static SqlSessionFactory factory; static SqlSession sqlSession; /** * 初始化SqlSessionFactory对象 */ static { try { InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); factory = new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { e.printStackTrace(); } } /** * 创建SqlSession对象 * * @return */ public static SqlSession createSqlSession() { sqlSession = factory.openSession(false); return sqlSession; } public static void closeSqlSession(SqlSession sqlSession) { if (sqlSession != null) { sqlSession.close(); } } }
测试(使用mybatis实现增删改查)
private static Logger logger = Logger.getLogger(DeptMapperTest.class); @Test public void getCount(){ SqlSession sqlSession = MybatisUtil.createSqlSession(); int count = sqlSession.selectOne("cn.tengyu.dao.DeptMapper.count"); logger.debug("部门表总记录数:"+count); sqlSession.close(); } @Test public void findAll(){ SqlSession sqlSession = MybatisUtil.createSqlSession(); Listdepts = sqlSession.selectList("cn.tengyu.dao.DeptMapper.findAll"); for (Dept dept :depts) { logger.debug("编号:"+dept.getDeptno()+"\t名称:"+dept.getDeptname()); } sqlSession.close(); } @Test public void findByName(){ SqlSession sqlSession = MybatisUtil.createSqlSession(); try { Dept dept = sqlSession.getMapper(DeptMapper.class).findByName("公关部"); logger.debug("编号:"+dept.getDeptno()+"\t名称:"+dept.getDeptname()); sqlSession.close(); } catch (Exception e) { logger.debug("查询结果为空!!!"); e.printStackTrace(); } } @Test public void findByDeptName(){ SqlSession sqlSession = MybatisUtil.createSqlSession(); List emps = sqlSession.getMapper(DeptMapper.class).findByDeptName("广告"); for (Emp emp :emps) { logger.debug("编号:"+emp.getEmpno()+"\t姓名:"+emp.getEmpname()); } sqlSession.close(); } @Test public void addDeptByName(){ SqlSession sqlSession = MybatisUtil.createSqlSession(); int i = sqlSession.getMapper(DeptMapper.class).addDeptByName("XXX"); if (i>0){ sqlSession.commit(); logger.debug("添加数据成功"+i+"条"); } sqlSession.close(); this.findAll(); } @Test public void addDept(){ SqlSession sqlSession = MybatisUtil.createSqlSession(); Dept dept = new Dept(); dept.setDeptno(1); dept.setDeptname("娱乐部"); try { int i = sqlSession.getMapper(DeptMapper.class).addDept(dept); if (i>0){ sqlSession.commit(); logger.debug("添加数据成功"+i+"条"); } } catch (Exception e) { sqlSession.rollback(); logger.debug("数据添加失败!"); e.printStackTrace(); } finally { MybatisUtil.closeSqlSession(sqlSession); } this.findAll(); } @Test public void delDept(){ SqlSession sqlSession = MybatisUtil.createSqlSession(); try { int i = sqlSession.getMapper(DeptMapper.class).delDept(12); if (i>0){ sqlSession.commit(); logger.debug("删除数据成功"+i+"条"); } } catch (Exception e) { sqlSession.rollback(); logger.debug("数据删除失败!"); e.printStackTrace(); } finally { MybatisUtil.closeSqlSession(sqlSession); } this.findAll(); } @Test public void modifyDept(){ SqlSession sqlSession = MybatisUtil.createSqlSession(); try { int i = sqlSession.getMapper(DeptMapper.class).modifyDept("测试部", "销售部"); if (i>0){ sqlSession.commit(); logger.debug("修改数据成功"+i+"条"); } } catch (Exception e) { sqlSession.rollback(); logger.debug("修改数据失败!!!"); e.printStackTrace(); } finally { MybatisUtil.closeSqlSession(sqlSession); } }
2.Spring框架搭建
依赖的jar包:(maven添加以下依赖即可)
<dependency> <groupId>junitgroupId> <artifactId>junitartifactId> <version>4.3version> <scope>testscope> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webmvcartifactId> <version>4.2.0.RELEASEversion> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-jdbcartifactId> <version>4.2.0.RELEASEversion> dependency> <dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>5.1.43version> dependency>
多种数据源的引用:
<dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-jdbcartifactId> <version>4.2.0.RELEASEversion> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>druidartifactId> <version>1.0.18version> dependency> <dependency> <groupId>commons-dbcpgroupId> <artifactId>commons-dbcpartifactId> <version>1.4version> dependency> <dependency> <groupId>com.mchangegroupId> <artifactId>c3p0artifactId> <version>0.9.5.2version> dependency>
DAO层实现:(为了使用getJdbcTempalte()方法需要注入/实现JdbcDaoSupport接口)
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.support.JdbcDaoSupport; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; public class NewsDaoImpl extends JdbcDaoSupport implements INewsDao { @Override public ListfindAll() { String sql = "SELECT * FROM infosm_news"; List list = getJdbcTemplate().query(sql, new RowMapper () { @Override public News mapRow(ResultSet rs, int rowNum) throws SQLException { News news = new News(); news.setNewsid(rs.getInt("newsid")); news.setNewstitle(rs.getString("newstitle")); news.setNewscontent(rs.getString("newscontent")); news.setClickcount(rs.getInt("clickcount")); return news; } }); return list; } }
核心配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dateSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///infosm"/> <property name="username" value="root"/> <property name="password" value="tengyu"/> bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dateSource"/> bean> <bean id="newsDao" class="cn.infosm.dao.impl.NewsDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"/> bean> <bean id="newsService" class="cn.infosm.service.impl.NewsServiceImpl"> <property name="dao" ref="newsDao"/> bean> <bean id="talkDao" class="cn.infosm.dao.impl.TalkDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"/> bean> <bean id="talkService" class="cn.infosm.service.impl.TalkServiceImpl"> <property name="dao" ref="talkDao"/> bean> beans>
正常测试即可:
@Test public void findAllNews(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); INewsService newsService = (INewsService) context.getBean("newsService"); Listlist = newsService.findAll(); for (News news :list) { System.out.println(news.getNewstitle()); } } @Test public void findAllTalks(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); ITalkService talkService = (ITalkService) context.getBean("talkService"); List list = talkService.findAll(); for (Talk talk :list) { System.out.println(talk.getTid()+talk.getContent()+talk.getTalktime()); } }