声明
之前学javaweb心态爆炸,觉得很烦躁。就直接上框架了,果然还是上点有挑战性的内容更能激发自己的学习能力。如果按部就班的学习效率不高的话,我也推荐大家可以尝试自上而下的学习方法,学以致用!
另外,我观看的是黑马的mybatis教学视频,感兴趣的同学可以去看视频内容。这一部分视频不长,讲得很清楚,推荐观看。
0.案例需要准备的数据库内容
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','女','北京修正');
1.mybatis简要介绍
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身。
mybatis 通过 xml 或 注解的方式 将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
2.mybatis框架快速入门
2.1 mybatis框架开发的准备
2.1.1 去官网下载mybatis框架
这里就不赘述如何去下载了。另外,官方文档还是很有用的,入门案例中用到一些xml配置文件,里面的内容可以去官方文档那里直接copy,然后进行修改。
2.2 搭建mybatis开发环境
2.2.1 创建maven工程
2.2.2 引入依赖
这里的内容其实就是之前在javaweb那里所学的引入jar包。但是在idea中的maven工程引入jar包非常方便。用上就会爱上!
在 pom.xml文件中的 <projects> </project>
便签中引入依赖
<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>
值得注意的是:在写了上述代码之后最好右键pom.xml,点击maven-->reload project 另外要在resource文件夹下面创建一个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
2.2.3 编写实体类
对应数据库中的表,在scr下(具体看自己的包结构,下面图示只是一个例子)编写实体类。
2.2.4 编写持久层接口
接口位置结构如上图。
package com.zhouman.dao;
import com.zhouman.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 用户的持久层接口
*/
public interface IUserDao {
/**
* 查询所有
* @return
*/
@Select("select * from user")
List<User> findAll();
}
看到这里,可能就会有同学想说,下一步是不是需要编写接口的实现类。但是mybatis框架的好处就是不需要那么做,只需要专注于sql语句即可。
2.2.5 编写持久层接口的映射文件IUserDao.xml
实现 IUserDao 接口的方法这里总结两种,这是其中之一,另一种是使用注释的方法。
IUserDao.xml 的编写要求:
- 创建位置:必须和持久层接口在相同的包中(区别在于它在resource下)
- 名称:与持久层接口,后缀名是.xml
IUserDao.xml 文件内容:模板是可以去官方文档赋值过来的,只需稍作修改。
<?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.zhouman.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.zhouman.domain.User">
select * from user
</select>
</mapper>
下面是去官方文档复制的内容: “入门-->探究已映射的 SQL 语句”
2.2.6 编写SqlMapConfig.xml配置文件
这是个全局配置文件。同样的模板也是可以去官方文档中copy,然后自己修改。
<?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">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/zhouman/dao/IUserDao.xml"/>
</mappers>
</configuration>
下面是去官方文档复制的内容: “入门-->从 XML 中构建 SqlSessionFactory”
2.2.7 编写测试类
使用框架的方便之处在于不用编写接口的实现类,需要通过SqlSession创建Dao接口的代理对象,然后执行方法即可!
/**
* mybatis的入门案例
*/
public class MybatisTest {
/**
* 入门案例
* @param args
*/
public static void main(String[] args) throws Exception {
//1.读取配置文件 SqlMapConfig.xml 注意 /
InputStream in = Resource.class.getResourceAsStream("/SqlMapConfig.xml");
//2.创建 SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for ( User user : users ) {
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
}
3 使用注解的方式实现接口的方法
大多数地方都是一样的,下面直接讲需要修改的部分。
第一个需要修改的地方:修改 SqlMapConfig.xml
<mappers>
<mapper class="com.zhouman.dao.IUserDao"/>
</mappers>
第二个需要修改的地方:不需要持久层接口的映射文件IUserDao.xml
第三个需要修改的地方:持久层接口文件
方法体上添加注释
/**
* 用户的持久层接口
*/
public interface IUserDao {
/**
* 查询所有
* @return
*/
@Select("select * from user")
List<User> findAll();
}