使用MyBatis的依赖导入
<!-- mysql Deiver-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
MyBatis的结构配置文件(核心配置)
属性配置
一般用于引入properties文件,必须防止在核心配置文件的前部分
properties文件用于存放链接数据库的信息(url,username,password),可以实现数据库环境的动态修改
url=jdbc:mysql://localhost:3306/mybatis? serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
#mysql版本8.0以上的useSSL要为false,同时要加时区serverTimezone=UTC
username=root
password=123456
设置配置
一般用于配置日志实现配置,实现日志输出
### set log levels ###
log4j.rootLogger = debug , stdout , D
### 输出到控制台 ###
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.DailyRollingFileAppender
log4j.appender.file.File = logs/log.log
log4j.appender.file.Append = true
log4j.appender.file.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 保存异常信息到单独文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.log ## 异常日志文件名
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
类别名配置
一般用于可以对实体类或者包起别名,方便使用,在实体类很多时可以对包起名(注解可以改包别名)
环境配置
就是对数据库连接进行配置,可以配置数据源,事务管理模式
不同的环境可设置不同的数据库连接等等,可以配置多套环境,通过默认关键词选择用那一套环境.
MyBatis的默认事务管理类型为JDBC,默认数据连接池是POOLED
连接池增加数据传输速度,事务管理类型不仅仅有JDBC
映射配置
将映射文件注册在核心配置文件中,才能在通过核心配置文件得到sqlSession时能够得到映射接口的dao实现类
核心配置文件按如下=
<?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 resource="db.properties">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--Deiver要是最新的,那么驱动名修改<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>-->
</properties>
<settings>
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<setting name="logImpl" value="log4j"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="text">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--绑定配置文件-->
<!-- <mappers>-->
<!-- <mapper resource="com/cs/dao/UserMapper.xml"/>-->
<!-- </mappers>-->
<!-- 绑定接口-->
<mappers>
<mapper resource="com/cs/dao/BlogMapper.xml"/>
</mappers>
</configuration>
MyBatis的映射文件配置
映射配置文件用于实现dao层的接口,代替dao实现类
映射配置文件可以实现sql语句的动态拼接,实现多种功能
step1:绑定接口,确定要实现的接口
step2:在mapper中写sql语句
sql语句参数传递的符号是#
可以用map实现代替实体类参数传递
使用通配符,字符串拼接,解决sql注入
结果集映射:可以对实体类属性和数据库的列进行映射(property—column)
1.普通操作
CRUD
2.嵌套查询
利用结果集映射中的association将实体类的属性T(对象)和数据库字段对应起来,同时确定属性T的实体类型(javaType)和T的查询方法比如:
3.联表查询
当出现;联表查询时,你需要多个表的数据,写了sql语句后,返回值必然只能用结果映射集,此时需要你在结果映射集中写好对应的关系,在联表信息区域,通过association关键字进行修饰,然后在对association进行修饰对应比如:
4.动态SQL
用以下标签可以在sql上进行逻辑拼接:if,choose,when,otherwise,where,set,trim,foreach
用sql标签可以实现sql语句的复用,但是注意不要存在where标签,最好sql语句仅仅作用于单表
以我的博客数据库中的用户表为例,userDao的实现类的配置文件如下
<?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.cs.dao.BlogMapper">
<sql id="if-title-author">
<if test="title != null">
title = #{title}
</if>
<if test="author != null">
and author = #{author}
</if>
</sql>
<insert id="addBlog" parameterType="com.cs.pojo.Blog">
insert into mybatis.blog(id,title,author,create_time,views)
value (#{id},#{title},#{author},#{createTime},#{views});
</insert>
<select id="queryBlogIF" parameterType="map" resultType="com.cs.pojo.Blog">
select * from mybatis.blog
<where>
<!-- <if test="title != null">-->
<!-- and title = #{title}-->
<!-- </if>-->
<!-- <if test="author != null">-->
<!-- and author = #{author}-->
<!-- </if>-->
<include refid="if-title-author"></include>
</where>
</select>
<select id="queryBlogChoose" parameterType="map" resultType="com.cs.pojo.Blog">
select * from mybatis.blog
<where>
<choose>
<when test="title != null">
title = #{title}
</when>
<when test="author != null">
and author = #{author}
</when>
<otherwise>
and views = #{views}
</otherwise>
</choose>
</where>
</select>
<update id="updateBlog" parameterType="map">
update mybatis.blog
<set>
<if test="title != null">
title = #{title},
</if>
<if test="author != null">
author = #{author}
</if>
</set>
where id = #{id}
</update>
<select id="queryBlogForeach" parameterType="map" resultType="com.cs.pojo.Blog">
select * from mybatis.blog
<where>
<foreach collection="ids" item="id" open="(" close=")" separator="or">
id = #{id}
</foreach>
</where>
</select>
</mapper>