Spring和Mybatis整合-原生dao开发

一、开发准备

1、jar 包

包括 spring开发必备包,mybatis核心包,spring和mybatis整合包,日志包

还有 Junit4 包

Spring和Mybatis整合-原生dao开发_第1张图片

 

2、数据库

我在本地测试,主机 localhost,用户名 root,密码为空

创建数据表 user,5个字段,测试数据如下

Spring和Mybatis整合-原生dao开发_第2张图片

 

二、文件结构

1、文件夹结构

Spring和Mybatis整合-原生dao开发_第3张图片

 

config 存放配置文件

----mybatis 存放mybatis的配置文件

----spring    存放spring的配置文件

----sqlmap   存放映射文件

----db.properties  数据库连接属性

src  存放源代码

----com.liuyanzhao.smm 包名

--------dao  存放dao类

--------po    存放持久类

--------test  存放测试类

 

本例文件一览

Spring和Mybatis整合-原生dao开发_第4张图片

其中 jar 包放在 web/WEB_INF/lib 文件夹中,并已导入 环境中

 

三、代码实现

应重视的文件,这里会高亮标识

1、Configuration.xml   mybatis 全局配置文件

  1. xml version="1.0" encoding="UTF-8" ?>
  2.     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3.     "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5.   
  6.   <mappers>
  7.     
  8.     <mapper resource="sqlmap/userDao.xml">mapper>
  9.   mappers>
  10. configuration>

mybatis 和 spring 整合后,我们不再需要在 mybatis 全局配置文件中加入 标签,数据库连接配置现在 在 spring 配置文件中以 bean 方式填写。

 

 

2、applicationContext.java

  1. xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:aop="http://www.springframework.org/schema/aop"
  6.        xmlns:tx="http://www.springframework.org/schema/tx"
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  8.     http://www.springframework.org/schema/beans/spring-beans.xsd
  9.     http://www.springframework.org/schema/context
  10.     http://www.springframework.org/schema/context/spring-context.xsd
  11.     http://www.springframework.org/schema/aop
  12.     http://www.springframework.org/schema/aop/spring-aop.xsd
  13.     http://www.springframework.org/schema/tx
  14.     http://www.springframework.org/schema/tx/spring-tx.xsd">
  15.     
  16.     <context:property-placeholder location="classpath:db.properties"/>
  17.     
  18.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  19.         
  20.         <property name="driverClass" value="${jdbc.driver}">property>
  21.         <property name="jdbcUrl" value="${jdbc.url}">property>
  22.         <property name="user" value="${jdbc.username}">property>
  23.         <property name="password" value="${jdbc.password}">property>
  24.     bean>
  25.     
  26.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  27.         
  28.         <property name="configLocation" value="mybatis/Configuration.xml"/>
  29.         
  30.         <property name="dataSource" ref="dataSource"/>
  31.     bean>
  32.     
  33.     <bean id="userDao" class="com.liuyanzhao.ssm.dao.UserDaoImpl">
  34.         <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
  35.     bean>
  36. beans>

先要创建数据源(dataSource),然后获得 连接工厂(sqlSessionFactory),最终得以配置

 

3、userDao.xml

  1. xml version="1.0" encoding="UTF-8" ?>
  2.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="test">
  5.     <select id="findUserById" parameterType="java.lang.Integer" resultType="com.liuyanzhao.ssm.po.User">
  6.         SELECT * FROM user WHERE id=#{value}
  7.     select>
  8. mapper>

这里都是 mybatis 里的知识了,没啥好说的

 

4、db.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
  3. jdbc.username=root
  4. jdbc.password=

之所以把 数据库连接信息从 applicationContext.xml 中分离出来,是因为以后我们的 xml 文件会越来越多,需要重新修改,甚至是让机器来修改 我们的数据库用户名和密码等信息,十分不方便。

 

5、UserDao.java    UserDao 接口

  1. package com.liuyanzhao.ssm.dao;
  2. import com.liuyanzhao.ssm.po.User;
  3. /**
  4.  * Created by 言曌 on 2017/8/10.
  5.  */
  6. public interface UserDao {
  7.     //根据id查询用户信息
  8.     public User findUserById(int id) throws Exception;
  9. }

 

6、UserDaoImpl.java    UserDao 的实现类

  1. package com.liuyanzhao.ssm.dao;
  2. import com.liuyanzhao.ssm.po.User;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.mybatis.spring.support.SqlSessionDaoSupport;
  5. /**
  6.  * Created by 言曌 on 2017/8/10.
  7.  */
  8. public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
  9.     @Override
  10.     public User findUserById(int id) throws Exception {
  11.         //通过继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSession
  12.         SqlSession sqlSession = this.getSqlSession();
  13.         //执行查询操作,赋值给user对象
  14.         User user = sqlSession.selectOne("test.findUserById",id);
  15.         //自动释放资源,不需要手动
  16.         return user;
  17.     }
  18. }

我们这里之所以继承 SqlSessionDaoSupport ,是因为 SqlSessionDaoSupport 的有一些方法,我们正好需要。

我们先看以前的方法

Spring和Mybatis整合-原生dao开发_第5张图片

我们必须手动创建 SqlSessionFactory 的对象,并且 UserDaoImpl 必须接受参数,才能创建 sqlSession


现在我们不用那个方法,通过集成 SqlSessionDaoSupport 类,可以让我们减少一些代码,让我们看一下 SqlSessionDaoSupport  的定义(IntelliJ IDEA下查看方法的定义快捷键是:Ctrl+Shift+I)

Spring和Mybatis整合-原生dao开发_第6张图片

现在我们获得 sqlSession 是不是简单很多呢

 

7、User.java    User的持久类

  1. package com.liuyanzhao.ssm.po;
  2. import java.util.Date;
  3. /**
  4.  * 用户的持久类
  5.  */
  6. public class User {
  7.     private int id; //编号
  8.     private String username; //用户名
  9.     private String gender; //性别
  10.     private Date birthday; //生日
  11.     private String address; //地址
  12.     public int getId() {
  13.         return id;
  14.     }
  15.     public void setId(int id) {
  16.         this.id = id;
  17.     }
  18.     public String getUsername() {
  19.         return username;
  20.     }
  21.     public void setUsername(String username) {
  22.         this.username = username;
  23.     }
  24.     public String getGender() {
  25.         return gender;
  26.     }
  27.     public void setGender(String gender) {
  28.         this.gender = gender;
  29.     }
  30.     public Date getBirthday() {
  31.         return birthday;
  32.     }
  33.     public void setBirthday(Date birthday) {
  34.         this.birthday = birthday;
  35.     }
  36.     public String getAddress() {
  37.         return address;
  38.     }
  39.     public void setAddress(String address) {
  40.         this.address = address;
  41.     }
  42.     @Override
  43.     public String toString() {
  44.         return "User{" +
  45.             "id=" + id +
  46.             ", username='" + username + '\'' +
  47.             ", gender='" + gender + '\'' +
  48.             ", birthday=" + birthday +
  49.             ", address='" + address + '\'' +
  50.             '}';
  51.     }
  52. }

 

8、测试类 UserDaoImplTest.java

  1. package com.liuyanzhao.ssm.test;
  2. import com.liuyanzhao.ssm.dao.UserDao;
  3. import com.liuyanzhao.ssm.po.User;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;
  8. /**
  9.  * Created by 言曌 on 2017/8/14.
  10.  */
  11. public class UserDaoImplTest {
  12.     private ApplicationContext applicationContext;
  13.     //在 setUp方法中得到spring容器
  14.     @Before
  15.     public void setUp() throws  Exception{
  16.         applicationContext =
  17.             new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
  18.     }
  19.     @Test
  20.     public void testFindUserById() throws Exception {
  21.         UserDao userDao = (UserDao) applicationContext.getBean("userDao");
  22.         //调用userDao的方法
  23.         User user = userDao.findUserById(28);
  24.         System.out.println(user);
  25.     }
  26. }

普通的 spring 形式

 

 

 

以上代码已打包:

链接: https://pan.baidu.com/s/1eSviRfk 密码: 8fy2

 

本文链接:https://liuyanzhao.com/5880.html

你可能感兴趣的:(mybatis,spring,Mybatis,Spring)