mybatis笔记
MyBatis是一款持久层框架。
映射配置文件
每一个接口对应一个映射配置文件,映射配置文件存储路径在resources目录下,并且要和接口的包路径保持一致,映射配置文件名需要和接口名保持一致。
idea创建映射配置文件模板,可以快速创建mybatis映射配置文件。
简单使用:
<?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.angen.dao.MemberDao">
<!--
id:在命名空间中唯一的标识符,可以被用来引用这条语句。一般我们就使用对应的接口中的方法名
parameterType:对应参数的类型,没有就不写
resultType:对应方法的返回值类型,如果返回值是list,那么对应的就是泛型类型
期望从这条语句中返回结果的类全限定名或别名。只有select标签才有
-->
<select id="findAll" resultType="com.angen.pojo.Member">
select * from dlq_member
</select>
<!--
引入参数中的数据
-->
<insert id="addMember" parameterType="com.angen.pojo.Member">
insert into dlq_member values(null,#{phone},#{username},#{password})
</insert>
<update id="updateMember" parameterType="com.angen.pojo.Member">
update dlq_member set username=#{username} where id=#{id}
</update>
<!--
引入的参数中的数据,如果参数是一个简单类型的数据(String,基本类型,包装类型)
那么我们可以通过#{任意字符}引入对应的参数
-->
<delete id="deleteMember" parameterType="java.lang.Integer">
delete from dlq_member where id=#{id}
</delete>
</mapper>
核心配置文件
1,存放路径必须是resources的根路径
2,配置文件的名字,随便写
3,一定要引入约束
mybatis核心配置文件_笑霸final的博客-CSDN博客_mybatis核心配置
<?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>
<!--设置连接数据库的环境-->
<!--
可以配置多个数据库
default:就是要使用哪个数据库环境的id
-->
<environments default="dev">
<!--开发环境-->
<environment id="dev">
<!--transactionManager 事务管理者-->
<transactionManager type="JDBC"/>
<!--
数据源dataSource
POOLED使用mybatis自带的连接池
UNPOOLED不使用连接池
JNDI使用JNDI环境里面的连接池
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test_mybatis?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<!--测试环境-->
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
</dataSource>
</environment>
<!--生产环境-->
<environment id="product">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="com/angen/dao/MemberDao.xml"/>
</mappers>
</configuration>
properties标签
<?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>
<!--
properties标签可以引入外部的配置
-->
<properties resource="jdbc.properties"></properties>
<!--设置连接数据库的环境-->
<!--
可以配置多个数据库
default:就是要使用哪个数据库环境的id
-->
<environments default="dev">
<!--开发环境-->
<environment id="dev">
<!--transactionManager 事务管理者-->
<transactionManager type="JDBC"/>
<!--
数据源dataSource
POOLED使用mybatis自带的连接池
UNPOOLED不使用连接池
JNDI使用JNDI环境里面的连接池
-->
<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="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
</dataSource>
</environment>
<!--生产环境-->
<environment id="product">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="com/angen/dao/MemberDao.xml"/>
</mappers>
</configuration>
在org.apache.ibatis.type.TypeAliasRegistry我们发现有很多别名
那么我们在配置映射文件的时候可以不可以写别名呢?
在核心配置文件中我们可以使用
typeAliases标签,来给类起别名
<!--
typeAliases配置别名,然后在映射文件中就可以不使用全限定名了
-->
<typeAliases>
<typeAlias type="com.angen.pojo.Member" alias="Member"></typeAlias>
</typeAliases>
由于有很多pojo类,如果按照以上方式一个一个配置很麻烦,所以有了如下这种方式:通过package标签进行包扫描批量配置别名。
表示将pojo包下的类都配置别名,别名就是类名,不区分大小写。
<typeAliases>
<!--<typeAlias type="com.angen.pojo.Member" alias="Member"></typeAlias>-->
<package name="com.angen.pojo"/>
</typeAliases>
mappers标签作用引入加载映射配置文件。
<!--引入映射文件-->
<mappers>
<mapper resource="com/angen/dao/MemberDao.xml"/>
</mappers>
通过包扫描的方式批量加载映射配置文件
<!--引入映射文件-->
<mappers>
<!--<mapper resource="com/angen/dao/MemberDao.xml"/>-->
<package name="com.angen.dao"/>
</mappers>
配置好,并且写好其他代码后执行
public class TestMybatis {
@Test
public void testFindAll() throws IOException {
//测试findall方法
//创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//读取核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建MemberDao代理对象
MemberDao mapper = sqlSession.getMapper(MemberDao.class);
//调用想执行的方法
List<Member> allMember = mapper.findAll();
for (Member member : allMember) {
System.out.println(member);
}
//增删改操作需要提交事务
sqlSession.commit();
//关闭资源
sqlSession.close();
}
}
idea mybatis插件
free-idea-mybatis是一款增强idea对mybatis支持的插件,主要功能如下:
生成mapper xml文件
快速从代码跳转到mapper及从mapper返回代码
mybatis自动补全及语法错误提示
集成mybatis generator gui界面
根据数据库注解,生成swagger model注解
直接alt+回车,自动生成映射文件中的标签
配置Mybatis日志打印,mybatis底层需要使用log4j日志打印框架来打印日志。
1,引入log4j引入依赖
2,配置log4j的配置文件
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
在 resources 目录下创建 log4j.properties 文件,复制以下代码。
可根据自身需求,将 文件输出的相关设置 中的 log4j.appender.file.File=./log/logFile.log 改变为自己的日志输出路径。
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file
#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/logFile.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG