MyBaties
基本介绍
快速入门
1 采用maven的pom.xml方式导入jar包
maven依赖包坐标
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
2 mybaties核心配置文件(mybaties-config.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>
<!-- 设置日志管理log4j,settings标签应该在typeAliases标签前面-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 设置映射文件的数据类型别名-->
<typeAliases>
<typeAlias type="com.jishou.mybatis.entity.LeiXing" alias="lx"></typeAlias>
</typeAliases>
<!-- default选择需要的环境-->
<environments default="development">
<environment id="development">
<!-- 选择事务管理器-->
<transactionManager type="JDBC"/>
<!-- 选择池化数据源,减小连接开启与关闭的开箱-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test?
characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件,只有加载了的映射文件才能用会话对数据库进行操作-->
<mappers>
<mapper resource="mapper/LeiXingMapper.xml"></mapper>
</mappers>
</configuration>
3 建立实体类
package com.jishou.mybatis.entity;
public class LeiXing {
private Integer id;
private String leixing;
@Override
public String toString() {
return "LeiXing{" +
"id=" + id +
", leixing='" + leixing + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLeixing() {
return leixing;
}
public void setLeixing(String leixing) {
this.leixing = leixing;
}
public LeiXing(Integer id, String leixing) {
this.id = id;
this.leixing = leixing;
}
public LeiXing() {
}
}
4 sql映射文件
文件内容
<?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">
<!--命名空间名:可以随便去但尽量与对应的类路径相同,用来区分不同类的相同id的sql语句-->
<mapper namespace="com.jishou.mybatis.dao.LeiXingDao">
<select id="chaLeiXing" resultType="lx">
SELECT * FROM lei_xing
</select>
</mapper>
5 通过mybatis api把数据库的数据传到java变量的内存中
代码
package com.jishou.mybatis;
import com.jishou.mybatis.entity.LeiXing;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
public class test {
public static void main(String[] args) throws IOException {
// 1.创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
// 2.解析主配置文件获得reader
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
// 3.创建SQLSessionFactory工厂
SqlSessionFactory sf = sfb.build(reader);
// 4.打开会话
SqlSession se = sf.openSession();
// 5.调用SqlSession Sql的Api执行 查询
List<LeiXing> list = se.selectList("com.jishou.mybatis.dao.LeiXingDao.chaLeiXing");
for (LeiXing lx: list
) {
System.out.println(lx.getLeixing());
}
// 6.关闭session
se.close();
}
}
mybatis优化
0. 简单优化集合
- typealiases中导入包,包下面的类在映射(Mapper)文件中可以省略包名就找到 导入包:在configuration中填下以下标签
<typeAliases>
<package name="com.jishou.mybatis.entity"/>
</typeAliases>
mapper.xml配置文件中
- 将获取会话之前的三句话封装在一个工具类里面,利用工具类获取sqlsessionfactory对象 工具类代码
package com.jishou.mybatis;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
// 1.创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
// 2.解析主配置文件获得reader
Reader reader = null;
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
// 3.创建SQLSessionFactory工厂
sqlSessionFactory = sfb.build(reader);
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
1. 主配置文件数据源属性设置优化(便于更换属性值)
- 先创建jdbc.properties文件设置变量
文件内容
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_test?characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
- 主配置文件加载属性文件
在configuration标签中添加以下标签
<properties resource="jdbc.properties"></properties>
- 数据源中取值
<environment id="development">
<!-- 选择事务管理器-->
<transactionManager type="JDBC"/>
<!-- 选择池化数据源,减小连接开启与关闭的开箱-->
<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>
2 mybatis使用方式优化
使用mybati方法及其步骤优化(总体与快速入门类似,但增加了sql操作接口)
- 导入mybatis包
- 创建mybatis主配置文件 与快速入门相同
- 创建需要增删查改的实体类 直接创建即可
- 创建sql操作接口以及sql操作Mapper.xml文件,并在主配置文件中加载Mapper.xml文件 其他与快速入门相同但 注意mapper.xml文件中的命名空间需要与sql操作接口类的包名相同,sql语句id需要与操作接口类的对应方法的方法名相同
- 利用mybatis api 完成sql语句对数据库的操作 api文件代码示例
public static void insert(){
//得到工厂对象
SqlSessionFactory sf = MyBatisUtil.getSqlSessionFactory();
//得到会话
SqlSession se = sf.openSession();
//通过会话获取sql操作对象
DianYingDao dianYingDao = se.getMapper(DianYingDao.class);
DianYing dianYing = new DianYing(9,2,"dagg","不知道","不知道",54F,null);
//通过sql操作对象调用sql语句方法
dianYingDao.insert(dianYing);
//提交事务
se.commit();
//关闭会话
se.close();
}
给sql语句传参
- 传参写法1(传基本数据类型或String)
mapper.xml文件内
<!-- 传基本数据类型或String时花括号填什么都可以-->
<select id="chaLeiXingById" parameterType="int" resultType="LeiXing">
select * from lei_xing where id = #{id}
</select>
java代码内
//1为传进去的值
List<LeiXing> list = se.selectList("com.jishou.mybatis.dao.LeiXingDao.chaLeiXingById",1);
- 传参写法2(传对象)
mapper.xml文件内
<!-- 传对象,想要获取对象属性值,直接通过对象属性名即可获取-->
<select id="chaLeiXingByLeiXing" parameterType="LeiXing" resultType="LeiXing">
select * from lei_xing where id = #{id} and leixing = #{leixing}
</select>
java代码内
LeiXing leiXing = new LeiXing(1,"呵呵");
List<LeiXing> list = se.selectList("com.jishou.mybatis.dao.LeiXingDao.chaLeiXingByLeiXing",leiXing);
log4j
基本介绍
日志框架
可用于mybatis的日志记录
快速入门
1.导入jar包 2.创建log4j.properties文件 3.在mybatis中设置log4j进行管理
1. 导入jar包
maven坐标
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.创建log4j.properties文件进行配置
#全局配置
log4j.rootLogger=ERROR,file
#mybatis配置输出日志
#此处要与需要日志记录的mapper文件的命名空间相对应,有命名空间的前缀即可
log4j.logger.com.jishou.mybatis=trace,stdout,file
#控制台输出日志
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
#文件输出日志
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:/log/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
3.在mybatis中使用log4j
在mybatis主配置文件中configuration标签中添加如下语句
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>