经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
Spring + Mybatis应该如何配置
来源:cnblogs  作者:Top丶赵立全  时间:2019/1/24 9:35:59  对本文有异议

### 1. MYBATIS简介

MYBATIS是持久层框架,大大的简化了持久层开发。

当使用MYBATIS框架时,开发人员不必再编写繁琐的JDBC代码,只需要定义好每个功能对应的抽象方法与需要执行的SQL语句即可!

### 2. 基本使用

#### 2.1. 添加依赖

需要在`pom.xml`中添加MyBatis的依赖:

  1.     <dependency>
  2.         <groupId>org.mybatis</groupId>
  3.         <artifactId>mybatis</artifactId>
  4.         <version>3.4.6</version>
  5.     </dependency>

然后添加MyBatis整合Spring的依赖:

  1.     <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version></dependency>

其底层实现是基于JDBC的,所以,还需要添加`spring-jdbc`的依赖,需要注意的是:此次使用的版本必须与`spring-webmvc`的保持一致:

  1.     <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.9.RELEASE</version></dependency>

根据使用的数据库,添加数据库连接驱动的依赖:

  1.     <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version></dependency>

添加数据源的依赖:

  1.     <dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency>

#### 2.2. 数据库连接

在`src/main/resources`下创建`db.properties`文件,用于配置数据库连接的相关信息:

#数据库驱动
driver=com.mysql.cj.jdbc.Driver
#数据库连接
url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
#数据库用户名
username=root
#数据库密码
password=
#数据库连接池初始连接数
initialSize=3
#数据库连接池最连接线程数
maxActive=5


在项目中准备名为`spring-dao.xml`的Spring配置文件,并加载以上数据库的配置文件:

  1.     <!-- 加载数据库的配置文件 --><util:properties id="dbConfig" 
  2.         location="classpath:db.properties" />

然后,将以上读取到的配置值应用于数据源`BasicDataSource`中:

  1.     <!-- 配置数据源 --><bean class="org.apache.commons.dbcp.BasicDataSource"><property name="url" 
  2.             value="#{dbConfig.url}" /><property name="driverClassName"value="#{dbConfig.driver}" /><property name="username"value="#{dbConfig.username}" /><property name="password"value="#{dbConfig.password}" /><property name="initialSize"value="#{dbConfig.initialSize}" /><property name="maxActive"value="#{dbConfig.maxActive}" /></bean>

以上配置时,各文件之间的关系如下图所示:

完成后,可以通过单元测试,以测试是否可以正确的获取到数据库的连接:

  1.     public class ConnectionTestCase {
  2.     
  3.         @Testpublic void getConnection() throws SQLException {
  4.             AbstractApplicationContext ac= new ClassPathXmlApplicationContext("spring-dao.xml");
  5.             
  6.             DataSource dataSource = 
  7.                     ac.getBean("dataSource", DataSource.class);
  8.             
  9.             System.out.println(dataSource.getConnection());
  10.             
  11.             ac.close();
  12.         }
  13.         
  14.     }

#### 2.3. 创建实体类

每张数据表都应该有1个对应的实体类,所以,创建`cn.tedu.mybatis.entity.User`类,属性的数量与类型请参考数据表的设计:

  1.     public class User implements Serializable {private static final long serialVersionUID = 7323921614984096421L;    private Integer id;private String username;private String password;private Integer age;private String phone;private String email;// SET/GET,toString()}

#### 2.4. 创建接口,声明抽象方法

创建`cn.tedu.mybatis.mapper.UserMapper`接口,并在接口中声明“插入用户数据”的抽象方法:

  1.     public interface UserMapper {
  2.     
  3.         Integer addnew(User user);
  4.         
  5.     }


关于抽象方法,在MyBatis中,执行的操作如果是增、删、改,返回值均使用`Integer`,表示受影响的行数;方法的名称可以自定义,只要不违反Java的命名规则即可,另外,不允许在接口中使用重载机制;参数也可以自定义,如果执行的是增加操作,参数应该是与数据表对应的实体类的类型。

#### 2.5. 配置接口所在的包

在MyBatis中,通过`MapperScannerConfigurer`类扫描持久层接口的,所以,应该在`spring-dao.xml`文件中进行配置:

  1.     <!-- MapperScannerConfigurer --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 配置接口文件所在的包 --><property name="basePackage"value="cn.tedu.mybatis.mapper" /></bean>

从FTP下载`somemapper.zip`压缩包,得到`SomeMapper.xml`文件。

在`src/main/resources`下创建名为`mappers`文件夹,然后将`SomeMapper.xml`重命名为`UserMapper.xml`,并粘贴到`mappers`文件夹下:

> 其实,这些XML文件的名称并不重要,可以自由命名,通常,推荐使用与接口文件相同的名称,便于管理。

然后,编写`UserMapper.xml`文件中的内容,首先,根节点必须是`<mapper>`,且根节点的`namespace`表示对应的接口文件,然后,添加子节点,以对应接口中的抽象方法:

#### 2.6. 配置XML文件的位置与数据源

MyBatis通过`SqlSessionFactoryBean`获取数据源,并且扫描配置了SQL语句的XML文件,最终由MyBatis框架来执行SQL语句,所以,需要在`spring-dao.xml`中配置`SqlSessionFactoryBean`:

  1.     <!-- SqlSessionFactoryBean --><bean class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据源,值为以上配置BasicDataSource节点的bean-id --><property name="dataSource" 
  2.             ref="dataSource" /><!-- XML文件在哪里 --><property name="mapperLocations" 
  3.             value="classpath:mappers/*.xml" /></bean>

#### 2.7. 单元测试

  1.     public class UserMapperTestCase {
  2.     
  3.         AbstractApplicationContext ac;
  4.         UserMapper mapper;
  5.         
  6.         @Beforepublic void doBefore() {
  7.             ac = new ClassPathXmlApplicationContext("spring-dao.xml");
  8.             mapper = ac.getBean("userMapper", UserMapper.class);
  9.         }
  10.         
  11.         @Afterpublic void doAfter() {
  12.             ac.close();
  13.         }
  14.         
  15.         @Testpublic void addnew() {
  16.             User user = new User();
  17.             user.setUsername("刘GB");
  18.             user.setPassword("666");
  19.             Integer rows = mapper.addnew(user);
  20.             System.out.println("rows=" + rows);
  21.         }
  22.         
  23.     }

### 3. 查询数据

#### 3.1. 根据id查询某个用户的信息

首先,在`UserMapper.java`接口中添加该功能对应的抽象方法:

  1. User findById(Integer id);

 

> 查询方法的返回可以根据所需要的类型来决定。

然后,在`UserMapper.xml`映射文件中添加新的节点配置抽象方法对应的SQL语句:

  1.     <select id="findById"resultType="cn.tedu.mybatis.entity.User">SELECT 
  2.             id, username, 
  3.             password, age, 
  4.             phone, email
  5.         FROM 
  6.             t_user
  7.         WHERE 
  8.             id=#{id}<select>

> 执行查询时,`<select>`节点中必须配置`resultType`属性(或者是`resultMap`属性)。

以上方法执行时,如果查询到匹配的数据,则返回有效的User对象,如果没有匹配的数据,则返回null。

原文链接:http://www.cnblogs.com/topzhao/p/10310695.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号