MyBatis
一、MyBatis 简介
1、MyBatis概述
1.MyBatis是一个持久层框架,用于简化JDBC开发,是Apache的一个开源项目。
2.MyBatis几乎免除了所有JDBC代码以及设置参数和获取结果集的工作。都是MyBatis自动完成。
2、框架
1.框架是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。
2.在框架的基础上构建软件编写更加高效、规范、通用、可扩展。
二、MyBatis使用
1. 创建Maven工程,添加坐标(mybatis、mysql、junit)
2. 创建pojo包,定义实体类
3. 创建相关接口(定义sql语句对应的方法)
4. 创建相关接口映射文件(定义对应的sql语句)
5. 创建mybatis核心配置文件sqlMapConfig.xml
6. 编写Java代码测试
1、UserDao.xml
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 要关联的接口-->
<mapper namespace="com.cwl.dao.UserDao">
<!--id 关联接口中的方法名-->
<!--resultType 返回值类型,如果返回值是集合,只需要只是集合的泛型就可以了-->
<select id="findAll" resultType="com.cwl.pojo.User">
select * from t_user;
</select>
</mapper>
2、SqlMapConfig.xml
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--选择默认环境变量配置 default属性用于指定要选择的环境变量配置-->
<environments default="development">
<!--环境变量配置 id指定将来配选择使用的配置名称-->
<environment id="development">
<!--事务配置 type用于配置要使用的事务模式-->
<transactionManager type="JDBC"></transactionManager>
<!--数据库连接池配置 type用于配置是否是选用mybatis中的连接池,
POOLED表示要使用的连接池, UNPOOLED表示不使用-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--用于配置关联的映射文件-->
<mappers>
<mapper resource="com/cwl/dao/UserDao.xml"/>
</mappers>
</configuration>
3、MybatisTest.java
@Test
public void test() throws IOException {
// 读取sqlMapConfig核心配置文件,得到字节输入流
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 构建SqlSessionFactory对象
SqlSessionFactory build = builder.build(in);
// 获取SqlSession对象
SqlSession sqlSession = build.openSession();
// 得到UserDao接口的代理对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
// 执行sql语句(代理对象.方法名)
List<User> users = userDao.findAll();
//处理数据
for (User user : users) {
System.out.println(user);
}
//释放会话资源
sqlSession.close();
}
三、日志
1、日志依赖
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
</dependencies>
2、log4j.properties
##设置日志记录到控制台的方式
log4j.appender.std=org.apache.log4j.ConsoleAppender
log4j.appender.std.Target=System.err
log4j.appender.std.layout=org.apache.log4j.PatternLayout
log4j.appender.std.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
##设置日志记录到文件的方式
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=mylog.txt
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
##日志输出的级别,以及配置记录方案,级别越低(error>warn>info>debug>trace),打印的信息越多。
##开发一般写debug,std(控制台显示)。项目上线推荐使用error,file。
log4j.rootLogger= info,std,file
四、Mapper接口使用规范
1.Mapper.xml文件中的namespace必须和mapper接口的全限定名相同。
2.Mapper.xml文件中的select, update等的标签id属性的值必须和mapper接口的方法名相同。
3.Mapper.xml文件中的select, update等的标签的parameterType必须和mapper接口的方法的形参类型对应。
4.Mapper.xml文件中的select, update等的标签的resultType必须和mapper接口的方法的返回值类型对应。
5.Mapper.xml文件名尽量和mapper接口的名字一样。
6.Mapper.xml文件的路径尽量和mapper接口的路径在同一层目录。
五、核心配置文件SqlMapConfig.xml
1、文件结构
1.configuration(配置)
properties(属性)
settings(设置)
typelAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
2.细节:配置各个标签时,需要遵守前后顺序的。
2、jdbc.properties配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false
jdbc.username=root
jdbc.password=root
3、SqlMapConfig.xml
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--加载properties配置文件-->
<properties resource="jdbc.properties">
</properties>
<!--起别名-->
<typeAliases >
<!--给单个实体类起别名-->
<!--
<typeAlias type="com.cwl.pojo.User" alias="user"/>
<typeAlias type="com.cwl.pojo.Brand" alias="brand"/>
-->
<!--批量起别名:给指定的包下所有的类起别名 规则:全小写-->
<package name="com.cwl.pojo"/>
</typeAliases>
<!--选择默认环境变量配置 default属性用于指定要选择的环境变量配置-->
<environments default="development">
<!--<environments default="development22222">-->
<!--环境变量配置 id指定将来被选择使用的配置名称-->
<environment id="development">
<!--事务配置 type用于配置要使用的事务模式-->
<transactionManager type="JDBC"></transactionManager>
<!--数据库连接池配置 type用于配置是否选用mybatis中的连接池,POOLED表示使用
连接池,UNPOOLED表示不使用
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="development22222">
<!--事务配置 type用于配置要使用的事务模式-->
<transactionManager type="JDBC"></transactionManager>
<!--数据库连接池配置 type用于配置是否选用mybatis中的连接池,POOLED表示使用
连接池,UNPOOLED表示不使用
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--用于配置关联的映射文件-->
<mappers>
<!--搜索映射文件:xml文件可以在任意位置-->
<!--<mapper resource="com/cwl/dao/UserDao.xml"/>-->
<!--搜索接口:xml和接口必须在同级目录-->
<!--<mapper class="com.cwl.dao.UserDao"/>-->
<!--<mapper class="com.cwl.dao.BrandDao"/>-->
<!--批量配置:xml和接口必须在同级目录-->
<package name="com.cwl.dao"/>
</mappers>
</configuration>