目录
1.4 编写持久层接口对应的映射文件 UserDao.xml
1.5 编写mybatis的核心配置文件 sqlMapConfig.xml
前言:
上篇文章大致介绍了mybatis框架,从本文开始正式进入mybatis框架的学习,在学习之前,需要准备一些数据。
资料准备:在我们mybatis课程的学习中,我们会用到一些数据表,相关对应的sql语句。
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','上海'),(42,'小二王','2018-03-02 15:09:37','女','四川成都'),(43,'小二王','2018-03-04 11:34:34','女','中国上海'),(45,'老刘','2018-03-04 12:04:06','男','北京昌平'),(46,'王','2018-03-07 17:37:26','男','北京'),(48,'小艾','2018-03-08 11:44:00','女','上海');
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
`ID` int(11) NOT NULL COMMENT '编号',
`UID` int(11) default NULL COMMENT '用户编号',
`MONEY` double default NULL COMMENT '金额',
PRIMARY KEY (`ID`),
KEY `FK_Reference_8` (`UID`),
CONSTRAINT `FK_Reference_8` FOREIGN KEY (`UID`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `account`(`ID`,`UID`,`MONEY`) values (1,41,1000),(2,45,1000),(3,41,2000);
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`ID` int(11) NOT NULL COMMENT '编号',
`ROLE_NAME` varchar(30) default NULL COMMENT '角色名称',
`ROLE_DESC` varchar(60) default NULL COMMENT '角色描述',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `role`(`ID`,`ROLE_NAME`,`ROLE_DESC`) values (1,'院长','学院领导'),(2,'总裁','公司老板'),(3,'校长','学校负责人');
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
`UID` int(11) NOT NULL COMMENT '用户编号',
`RID` int(11) NOT NULL COMMENT '角色编号',
PRIMARY KEY (`UID`,`RID`),
KEY `FK_Reference_10` (`RID`),
CONSTRAINT `FK_Reference_10` FOREIGN KEY (`RID`) REFERENCES `role` (`ID`),
CONSTRAINT `FK_Reference_9` FOREIGN KEY (`UID`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user_role`(`UID`,`RID`) values (41,1),(45,1),(41,2);
上面代码,需要放到mysql环境中执行脚本,作为后续学习mybatis框架所需数据。
1、搭建mybatis环境
1.1 创建maven工程,添加对应坐标
创建Maven工程可以参考这篇文章: http://t.csdnimg.cn/jj5cphttp://t.csdnimg.cn/jj5cp
在pom文件里面添加如下内容
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
这里简单介绍一下上面的导入的依赖:
- mybatis依赖是mybatis环境所需的依赖,有了这个依赖才能编写相关的mybatis代码。
- Junit依赖是单元测试依赖,方便后续测试代码。
- mysql - connector -Java依赖是数据库驱动,因为要操作数据库,所以这个依赖也不可少
- log4j依赖是日志依赖,它可以方便我们在控制台查看代码执行过程,对代码的执行有一个更直观的表现
1.2 编写实体类
public class User{
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
1.3 编写持久层接口
public interface UserDao {
//查询全部用户信息
public List<User> findAll();
}
值得注意的是,之前我们实现接口都是创建一个实现类去实现我们的接口,现在学习mybatis我们不再需要这么做了,现在换成创建xml文件,在xml文件里面去实现我们的接口
1.4 编写持久层接口对应的映射文件 UserDao.xml
这个xml文件需要放在resource目录下面(main目录下的resource目录),
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xq.dao.UserDao">
<!--
配置查询所有操作
id:方法名称,和接口名称需要对应
resultType:返回值类型
-->
<select id="findAll" resultType="com.xq.pojo.User">
select * from user
</select>
</mapper>
这里简单介绍一下上面代码的含义,后续会有更详细的介绍
namespace属性 | 接口文件的全限定名称 |
select标签 | 查询操作的标签 |
id属性 | 接口方法名称 |
resultType属性 | 返回值类型 |
注意:这里说明一下resultType属性,因为接口方法的返回值类型是user,这里必须写user的全限定名称,因为mybatis要把查询的结果映射给实体类,所以这里不能单纯写user,这样方便找到这个对应的实体类。
1.5 编写mybatis的核心配置文件 sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置 mybatis 的环境 -->
<environments default="mysql">
<!-- 配置 mysql 的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置连接数据库的信息:用的是数据源(连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.10.137:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="Admin123!"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置 -->
<mappers>
<mapper resource="com/xq/dao/UserDao.xml"></mapper>
</mappers>
</configuration>
1.6 测试代码
为了测试查看更好的效果,我们在resources目录(main目录下的resource目录)下面添加log4j.properties文件。
- log4j.properties文件
复制即可。
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
- 测试代码,测试代码在test目录下面编写
public class MybatisTest {
public static void main(String[] args) throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession();
//5.使用 SqlSession 创建 dao 接口的代理对象
UserDao userDao = session.getMapper(UserDao.class);
//6.使用代理对象执行查询所有方法
List<User> users = userDao.findAll();
for(User user : users) {
System.out.println(user);
}
//7.释放资源
session.close();
in.close();
}
}
整个项目结构如下:
最后测试结果如下:
到这里我们整个mybatis入门案例搭建成功。