Spring和Mybatis整合-原生dao开发

avatar 2017年08月14日16:15:25 1 3568 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此

一、开发准备


1、jar 包

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

还有 Junit4 包





2、数据库

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

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




二、文件结构


1、文件夹结构





config 存放配置文件

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

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

----sqlmap   存放映射文件

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

src  存放源代码

----com.liuyanzhao.smm 包名

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

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

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



本例文件一览



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


三、代码实现


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

1、Configuration.xml   mybatis 全局配置文件
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3.     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4.     "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.   <!--加载映射文件-->
  7.   <mappers>
  8.     <!--单条映射-->
  9.     <mapper resource="sqlmap/userDao.xml"></mapper>
  10.   </mappers>
  11. </configuration>

mybatis 和 spring 整合后,我们不再需要在 mybatis 全局配置文件中加入 <environments> 标签,数据库连接配置现在 在 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.     <!--数据源,配置c3p0连接池-->
  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.     <!--sqlSessionFactory-->
  26.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  27.         <!--加载mybatis配置文件-->
  28.         <property name="configLocation" value="mybatis/Configuration.xml"/>
  29.         <!--配置数据源,ref和数据源的id一致-->
  30.         <property name="dataSource" ref="dataSource"/>
  31.     </bean>
  32.     <!--原始dao接口,ref和sqlSessionFactory的id一致-->
  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. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="test">
  6.     <select id="findUserById" parameterType="java.lang.Integer" resultType="com.liuyanzhao.ssm.po.User">
  7.         SELECT * FROM user WHERE id=#{value}
  8.     </select>
  9. </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 的有一些方法,我们正好需要。

我们先看以前的方法



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



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



现在我们获得 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
  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0