Spring和Mybatis整合-mapper开发

avatar 2017年8月14日19:22:16 评论 205 views

接着上篇文章 Spring和Mybatis整合-原生dao开发 写。

一、开发准备

1、jar 包

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

还有 Junit4 包

Spring和Mybatis整合-原生dao开发

 

2、数据库

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

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

Spring和Mybatis整合-原生dao开发

 

二、文件结构

1、文件夹结构

 

config 存放配置文件

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

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

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

src  存放源代码

----com.liuyanzhao.smm 包名

--------mapper 存放mapper类和mapper.xml(映射文件)

--------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. </configuration>

我们这里不需要添加 mybatis 配置,因为目前所有的配置(数据库连接,添加映射)都让 spring 做了。其中添加映射也去掉了,是因为在 spring 配置文件中开启了mapper批量扫描,待会儿有介绍。

 

2、applicationContext.java   spring 的配置文件

  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.     <!--mapper批量扫描-->
  33.     <!--
  34.         mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册
  35.         遵循规范:将mapper.java和mapper.xml映射文件保持一致,且在一个目录中
  36.         自动扫描出来的mapper的bean的id和mapper类名(首字母小写)
  37.     -->
  38.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  39.         <!--指定扫描的包名-->
  40.         <property name="basePackage" value="com.liuyanzhao.ssm.mapper" />
  41.         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
  42.     </bean>
  43. </beans>

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

 

本例 (mapper开发)的代码优化过一次,以前是 每一个 mapper,我们就要添加一个 bean,像这样

同时,还需要在 mybatis 的全局配置文件中添加映射

现在,当我们添加了 mapper批量扫描 代码,spring会帮我们做很多事情。

 mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册  

遵循规范:将mapper.java和mapper.xml映射文件保持一致,且在一个目录中  

自动扫描出来的mapper的bean的id和mapper类名(首字母小写)  

同时,这里推荐使用mapper批量扫描

 

3、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 文件会越来越多,需要重新修改,甚至是让机器来修改 我们的数据库用户名和密码等信息,十分不方便。

 

4、UserMapper.java

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

 

5、UserMapper.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="com.liuyanzhao.ssm.mapper.UserMapper">
  6.     <!--查询用户-->
  7.     <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.ssm.po.User">
  8.         SELECT * FROM user WHERE id=#{value}
  9.     </select>
  10. </mapper>

 

6、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. }

 

7、测试类 UserMapperTest.java

  1. package com.liuyanzhao.ssm.test;
  2. import com.liuyanzhao.ssm.mapper.UserMapper;
  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 UserMapperTest {
  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.         UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
  22.         //调用userMapper的方法
  23.         User user = userMapper.findUserById(29);
  24.         System.out.println(user);
  25.     }
  26. }

 

 

以上代码已打包:

链接: https://pan.baidu.com/s/1gf6Ckx1 密码: hbqd

 

 

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

历史上的今天
八月
14
  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: