Spring + Mybatis应该如何配置
### 1. mybatis简介
mybatis是持久层框架,大大的简化了持久层开发。
当使用mybatis框架时,开发人员不必再编写繁琐的jdbc代码,只需要定义好每个功能对应的抽象方法与需要执行的sql语句即可!
### 2. 基本使用
#### 2.1. 添加依赖
需要在`pom.xml`中添加mybatis的依赖:
<dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.4.6</version> </dependency>
然后添加mybatis整合spring的依赖:
<dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version>1.3.2</version> </dependency>
其底层实现是基于jdbc的,所以,还需要添加`spring-jdbc`的依赖,需要注意的是:此次使用的版本必须与`spring-webmvc`的保持一致:
<dependency> <groupid>org.springframework</groupid> <artifactid>spring-jdbc</artifactid> <version>4.3.9.release</version> </dependency>
根据使用的数据库,添加数据库连接驱动的依赖:
<dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>8.0.13</version> </dependency>
添加数据源的依赖:
<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配置文件,并加载以上数据库的配置文件:
<!-- 加载数据库的配置文件 --> <util:properties id="dbconfig" location="classpath:db.properties" />
然后,将以上读取到的配置值应用于数据源`basicdatasource`中:
<!-- 配置数据源 --> <bean class="org.apache.commons.dbcp.basicdatasource"> <property name="url" 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>
以上配置时,各文件之间的关系如下图所示:
完成后,可以通过单元测试,以测试是否可以正确的获取到数据库的连接:
public class connectiontestcase { @test public void getconnection() throws sqlexception { abstractapplicationcontext ac = new classpathxmlapplicationcontext( "spring-dao.xml"); datasource datasource = ac.getbean("datasource", datasource.class); system.out.println(datasource.getconnection()); ac.close(); } }
#### 2.3. 创建实体类
每张数据表都应该有1个对应的实体类,所以,创建`cn.tedu.mybatis.entity.user`类,属性的数量与类型请参考数据表的设计:
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`接口,并在接口中声明“插入用户数据”的抽象方法:
public interface usermapper { integer addnew(user user); }
关于抽象方法,在mybatis中,执行的操作如果是增、删、改,返回值均使用`integer`,表示受影响的行数;方法的名称可以自定义,只要不违反java的命名规则即可,另外,不允许在接口中使用重载机制;参数也可以自定义,如果执行的是增加操作,参数应该是与数据表对应的实体类的类型。
#### 2.5. 配置接口所在的包
在mybatis中,通过`mapperscannerconfigurer`类扫描持久层接口的,所以,应该在`spring-dao.xml`文件中进行配置:
<!-- 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.7. 配置xml文件的位置与数据源
mybatis通过`sqlsessionfactorybean`获取数据源,并且扫描配置了sql语句的xml文件,最终由mybatis框架来执行sql语句,所以,需要在`spring-dao.xml`中配置`sqlsessionfactorybean`:
<!-- sqlsessionfactorybean --> <bean class="org.mybatis.spring.sqlsessionfactorybean"> <!-- 数据源,值为以上配置basicdatasource节点的bean-id --> <property name="datasource" ref="datasource" /> <!-- xml文件在哪里 --> <property name="mapperlocations" value="classpath:mappers/*.xml" /> </bean>
#### 2.8. 单元测试
public class usermappertestcase { abstractapplicationcontext ac; usermapper mapper; @before public void dobefore() { ac = new classpathxmlapplicationcontext("spring-dao.xml"); mapper = ac.getbean("usermapper", usermapper.class); } @after public void doafter() { ac.close(); } @test public void addnew() { user user = new user(); user.setusername("刘gb"); user.setpassword("666"); integer rows = mapper.addnew(user); system.out.println("rows=" + rows); } }
### 3. 查询数据
#### 3.1. 根据id查询某个用户的信息
首先,在`usermapper.java`接口中添加该功能对应的抽象方法:
user findbyid(integer id);
> 查询方法的返回可以根据所需要的类型来决定。
然后,在`usermapper.xml`映射文件中添加新的节点配置抽象方法对应的sql语句:
<select id="findbyid" resulttype="cn.tedu.mybatis.entity.user"> select id, username, password, age, phone, email from t_user where id=#{id} <select>
> 执行查询时,`<select>`节点中必须配置`resulttype`属性(或者是`resultmap`属性)。
以上方法执行时,如果查询到匹配的数据,则返回有效的user对象,如果没有匹配的数据,则返回null。
上一篇: mysql之Navicat工具、pymysql模块
下一篇: 数据库的相关操作
推荐阅读
-
Spring boot如何快速的配置多个Redis数据源
-
SpringBoot Mybatis如何配置多数据源并分包
-
springboot如何使用logback-spring配置日志格式,并分环境配置
-
spring boot 之 Mybatis 配置
-
spring boot + mybatis如何实现数据库的读写分离
-
Spring + Mybatis应该如何配置
-
[原创] Spring 配置文件中如何读取系统环境变量
-
ssm框架集成时,在spring配置文文件中集成mybatis时,在sqlSessionFactory中的属性configuration配置日志出错
-
spring事务深入剖析 - 事务框架和mybatis如何衔接的
-
spring mvc捕获异常时,如何判断应该返回json还是跳转错误页面