## 配置驱动区局配置
![](https://img.kancloud.cn/6a/be/6abe2cc6b2c485912bc45dd6d7b7ba56_769x90.png)
~~~
<?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" />
<!-- 配置mybatis的环境信息 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClass}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- <mapper resource="com/gyf/sqlmap/User.xml"></mapper>-->
<mapper resource="com/gyf/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
~~~
## 获取sql句柄
~~~
package com.gyf.test;
import com.gyf.model.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class Demo1 {
SqlSession sqlSession;
@Before
public void before() throws IOException {
//读取配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//通过sqlsessionFactory创建sqlsessionfactory
SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(is);
sqlSession=sqlSessionFactory.openSession();
//
}
@After
public void after(){
//关闭sqlsession
sqlSession.close();
}
@Test
public void test1() throws IOException {
User user= sqlSession.selectOne("findUserById",10);
List<User> users= sqlSession.selectList("findUserByName","张");
System.out.println(users);
}
//插入
@Test
public void test2(){
User user=new User("哈哈12","2",new Date(),"郑州");
sqlSession.insert("insertUser",user);
sqlSession.commit();
}
//删除通过id
@Test
public void test3(){
sqlSession.delete("deleteById",29);
sqlSession.commit();
}
//通过对象
@Test
public void test4(){
User user =new User(28);
sqlSession.delete("deleteByUser",28);
sqlSession.commit();
}
//通过对象
@Test
public void test5(){
User user=new User("哈哈12","2",new Date(),"郑州s");
user.setId(27);
sqlSession.update("updateAddress",user);
sqlSession.commit();
}
//插入
@Test
public void test6(){
User user=new User("哈哈12","2",new Date(),"郑州");
int row=sqlSession.insert("insertUserId",user);
sqlSession.commit();
System.out.println(row);
System.out.println(user.getId());
}
}
~~~
## 编写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="user">
<!--根据id查询-->
<select id="findUserById" parameterType="int" resultType="com.gyf.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="findUserByName" parameterType="String" resultType="com.gyf.model.User">
SELECT * FROM user WHERE username LIKE '%${value}%'
</select>
<insert id="insertUser" parameterType="com.gyf.model.User">
INSERT INTO user (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address});
</insert>
<delete id="deleteById" parameterType="int">
DELETE FROM user where id = #{id}
</delete>
<delete id="deleteByUser" parameterType="com.gyf.model.User">
DELETE from user where id =#{id}
</delete>
<!--更新地址-->
<update id="updateAddress" parameterType="com.gyf.model.User">
UPDATE user SET address = #{address} where id = #{id}
</update>
<insert id="insertUserId" parameterType="com.gyf.model.User">
<selectKey resultType="int" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address});
</insert>
</mapper>
~~~
### 第二种写法使用namespace
~~~
<?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.gyf.mapper.UserMapper">
<insert id="save" parameterType="com.gyf.model.User">
INSERT INTO user (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address});
</insert>
<select id="getUserById" parameterType="int" resultType="com.gyf.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
~~~
## 配置扫描取别名
~~~
<typeAliases>
<!-- <typeAlias type="com.gyf.model.User" alias="user" />-->
<package name="com.gyf.model"/>
<package name="com.gyf.vo"/>
</typeAliases>
~~~
![](https://img.kancloud.cn/d6/6a/d66a0bd8162c221b0fa03a5ab4c72261_441x163.png)
## 输出映射
### **resultType**
使用resultType进行结果映射时,查询的列名和映射的pojo属性名完全一致,该列才能映射成功。
如果查询的列名和映射的pojo属性名全部不一致,则不会创建pojo对象;
如果查询的列名和映射的pojo属性名有一个一致,就会创建pojo对象。
### **resultMap**
如果查询出来的列名和属性名不一致,通过定义一个**resultMap将列名和pojo属性名**之间作一个映射关系。
1、定义resultMap
2、使用resultMap作为statement的输出映射类型
~~~
<!--返回结果集-->
<resultMap id="userResultMap" type="user">
<id property="id" column="id_"></id>
<id property="username" column="username_"></id>
</resultMap>
<select id="findUserByIdResultMap" resultMap="userResultMap" parameterType="int">
SELECT id ,username username_ FROM user where id =#{id}
</select>
~~~
## **if 和where使用**
![](https://img.kancloud.cn/8f/38/8f380e2a922d072cd7af45af1f395219_561x47.png)
~~~
<select id="findUserList" resultType="user" parameterType="UserQueryVo">
SELECT * FROM user u
<where>
<if test="user != null">
<if test="user.sex != null and user.sex !=''">
u.sex =#{user.sex}
</if>
<if test="user.username != null and user.username !=''">
AND u.username LIKE '%${user.username}%'
</if>
</if>
</where>
</select>
~~~
![](https://img.kancloud.cn/b8/49/b849bb8438c565cf41b2feb7467585be_749x243.png)
![](https://img.kancloud.cn/35/d8/35d8fcb9204b5d73b68c3d31271579a4_1317x144.png)
## sql标签片段
~~~
<sql id="find_user">
<if test="user != null">
<if test="user.sex != null and user.sex !=''">
u.sex =#{user.sex}
</if>
<if test="user.username != null and user.username !=''">
AND u.username LIKE '%${user.username}%'
</if>
<if test="user.address != null and user.address !=''">
AND u.address LIKE '%${user.address}%'
</if>
</if>
</sql>
<select id="findUserList" resultType="user" parameterType="UserQueryVo">
SELECT * FROM user u
<where>
<include refid="find_user"/>
</where>
</select>
~~~
![](https://img.kancloud.cn/10/7f/107fe1f726d936f417f9d3e1ebbc204e_506x418.png)
## foreach
1. collection 集合
2. item 赋值元素
3. open 开始拼接字段
4. open 结束拼接字段
5. separator 分割字符
~~~
<select id="findUserByIds" resultType="user" parameterType="UserQueryVo">
SELECT * FROM user
<where>
<if test="ids !=null and ids.size>0">
<foreach collection="ids" item="id" open="id in (" close=")" separator=",">
${id}
</foreach>
</if>
</where>
</select>
~~~
![](https://img.kancloud.cn/c5/c5/c5c5923ae261fe49432d8bf7eacc675f_731x70.png)
![](https://img.kancloud.cn/44/a7/44a7339d7e2e931862f24274d6a4b6b7_309x40.png)
## 配置懒加载
~~~
<settings>
<!--懒加载-->
<setting name="lazyLoadingEnable" value="true"/>
</settings>
~~~
![](https://img.kancloud.cn/b3/da/b3da1d171c66c51b78f5fea120f2a2c7_783x171.png)
- 面试
- php
- laravel
- 安装
- 创建数据
- 创建控制器
- 错误
- 权限认证
- 图形验证码
- 管理员
- 无限分类
- 视频播放
- 推流
- pc页面
- thinkphp5
- 表单提交安全验证
- crontab
- 获取下级所有数据
- 过滤敏感词
- 二维码
- 邀请码
- jwt token
- 笛卡尔
- 高并发解决优化
- 设置多语言
- 计算经纬度两点距离
- 分片上传
- centos swoole
- 查看swoole版本
- centos 安装 redis
- 把整数随机分成n份或者红包
- 生成随机字符串
- 获取上级
- 宝塔搭建nginx推拉流
- 生成二维码海报
- 二维数组去重
- 经纬度 ---边距 和判断是不是范围内
- workerman
- 扩展
- redis
- mysql
- mysql 主从复制
- 定位问题语句
- 列的选择规则
- Enum介绍
- 索引介绍
- 延迟关联
- in 查询陷阱
- limit 优化
- 事务
- 读写分离
- mysql 权限错误
- mysql计算距离
- mysql数据导出导入
- 索引失效
- mysql 语句技巧
- linux
- 配置nginx 高可用
- Nginx内核参数优化
- 配置优化
- nginx-keepalived实现高可用负载
- lvs+keepalived
- centos5关闭防火墙
- nginx操作
- linux操作
- mysql 安装
- php
- 安装phpadmin
- php7安装mongodb
- 查看php位置
- 查找开启的进程端口
- 守护进程
- centos安装php7.2
- centos 错误解决
- 安装php7错误
- mysql 错误
- 支付宝支付
- html
- js 倒计时
- go vscode 配置
- go util
- 获取两个数之间随机数
- java
- lambda
- 随机抽取
- lombok
- springboot
- 常见注解
- 接受参数常用注解
- 文件上传
- 上传错误日志拦截
- 拦截器
- 定时任务
- mybatis
- 关联查询
- 全局配置
- 缓存
- git
- 微信相关
- 体现到零钱
- 服务商转账
- 公众号小程序相关
- 小程序二维码
- svn
- layui