目录
开启驼峰映射:如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射。
字段起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样。
@Results @Result:通过 @Results及@Result 进行手动结果映射。
@Param 标注在方法参数的前面,用于声明参数在#{}中的名字
${}性能低,不安全,存在SQL注入问题:
#{}推荐:
XML文件的名称与Mapper接口名称一致,并且放置在相同包下(同包同名)。
XML文件的namespace属性为Mapper接口全限定名一致。
XML文件中sql语句的id与Mapper 接口中的方法名一致。
XML文件中sql语句的返回类型与Mapper 接口中的方法返回类型一致。
用于判断条件是否成立,如果条件为true,则拼接SQL
where 元素只会在子元素有内容的情况下才插入where子句
而且会自动去除子句的开头的AND 或OR
动态地在行首插入SET关键字,并会删掉额外的逗号(用在update语句中)
用来批量处理的 比如批量删除拼接 in后面的值
定义一个sql片段 就是提取公共的sql
引入sql片段
控制一些全局配置项的开闭
加载Mapper接口位置
Druid(德鲁伊): 阿里巴巴提供的数据库连接池技术,国内使用率很高,提供了完善的监控机制
HikariCP: 日本人开发的连接池技术,号称性能之王,速度最快,SpringBoot2.0默认使用此连接池
代码如下(示例):
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
-
- import java.time.LocalDate;
- import java.time.LocalDateTime;
-
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class Emp {
- private Integer id;
- private String username;
- private String password;
- private String name;
- private Short gender;
- private String image;
- private Short job;
-
- //注意:这四个属性跟数据表中的字段不一致
- private LocalDate ed;
-
- private Integer deptId;
- private LocalDateTime createTime;
- private LocalDateTime updateTime;
- }
代码如下:
- import org.apache.ibatis.annotations.Param;
- import org.apache.ibatis.annotations.Result;
- import org.apache.ibatis.annotations.Results;
- import org.apache.ibatis.annotations.Select;
-
- import java.time.LocalDate;
- import java.util.Date;
- import java.util.List;
-
- public interface EmpMapper {
-
- @Select("select * from emp")
- public List
findAll(); -
- @Select("select * from emp")
- public List
findAll1(); -
- @Select("select id,username,password,name,gender,image,job,entrydate ed,dept_id,create_time,update_time from emp")
- public List
findAll2(); -
- @Select("select * from emp")
- @Results({
- @Result(column = "entrydate",property = "ed")
- })
- public List
findAll3(); -
- @Select("select * from emp where name =#{name} and gender = #{gender} and entrydate between #{begin} and #{end} ")
- @Results({
- @Result(column = "entrydate",property = "ed")
- })
- public List
findByCondition(@Param("name") String name,@Param("gender") Integer gender,@Param("begin") LocalDate begin,@Param("end") LocalDate end); -
- @Select("select * from emp where name like concat('%',#{name},'%') and gender = #{gender} and entrydate between #{begin} and #{end} ")
- @Results({
- @Result(column = "entrydate",property = "ed")
- })
- public List
findByCondition2(@Param("name") String name,@Param("gender") Integer gender,@Param("begin") LocalDate begin,@Param("end") LocalDate end); -
- public Emp findById(Integer id);
-
- List
findByCondition3(@Param("name") String name,@Param("gender") Short gender,@Param("begin") LocalDate begin,@Param("end") LocalDate end); -
- void update(Emp emp);
-
- void deleteByIds(@Param("ids") List
ids) ; - }
代码如下:
- 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.InputStream;
-
- public class MybatisUtil {
-
- private static SqlSessionFactory sqlSessionFactory = null;
-
- //保证SqlSessionFactory仅仅创建一次
- static {
- try {
- //读取配置文件
- InputStream stream = Resources.getResourceAsStream("SqlMapConfig.xml");
- //创建SqlSessionFactory
- sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- //获取sqlSession
- public static SqlSession getSqlSession() {
- return sqlSessionFactory.openSession();
- }
-
- //提交事务 关闭sqlSession
- public static void close(SqlSession sqlSession) {
- if (sqlSession != null) {
- //提交事务
- sqlSession.commit();
- //释放资源
- sqlSession.close();
- }
- }
- }
代码如下:
- "1.0" encoding="UTF-8" ?>
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.itheima.mapper.EmpMapper">
-
- <sql id="mySql">
- select * from emp
- sql>
-
- <resultMap id="MyMap" type="com.itheima.domain.Emp">
- <result column="entrydate" property="ed"/>
- resultMap>
- <select id="findById" resultMap="MyMap">
- <include refid="mySql"/>
- where id = #{id}
- select>
-
-
- <select id="findByCondition3" resultType="com.itheima.domain.Emp">
- <include refid="mySql"/>
- <where>
- <if test="name != null and name !=''">
- name like concat('%',#{name},'%')
- if>
- <if test="gender != null">
- and gender = #{gender}
- if>
- <if test="begin != null and end != null">
- and entrydate between #{begin} and #{end}
- if>
- where>
- select>
-
- <update id="update">
- update emp
- <set>
- <if test="username != null and username != ''">
- username = #{username},
- if>
- <if test="password != null and password != ''">
- password = #{password},
- if>
- <if test="name != null and name != ''">
- name = #{name},
- if>
- <if test="gender != null">
- gender = #{gender},
- if>
- <if test="image != null and image != ''">
- image = #{image},
- if>
- <if test="job != null">
- job = #{job},
- if>
- <if test="ed != null">
- entrydate = #{ed},
- if>
- <if test="deptId != null">
- dept_id = #{deptId},
- if>
- <if test="createTime != null">
- create_time = #{createTime},
- if>
- <if test="updateTime != null">
- update_time = #{updateTime},
- if>
- set>
- where id = #{id}
- update>
-
- <delete id="deleteByIds">
- delete from emp where id in
- <foreach collection="ids" item="id" separator="," open="(" close=")">
- #{id}
- foreach>
- delete>
-
-
- mapper>
代码如下:
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <settings>
- <setting name="mapUnderscoreToCamelCase" value="true"/>
-
- <setting name="logImpl" value="STDOUT_LOGGING"/>
- settings>
-
-
- <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"/>
- <property name="username" value="root"/>
- <property name="password" value="root"/>
- dataSource>
- environment>
- environments>
-
- <mappers>
-
- <package name="com.itheima.mapper"/>
- mappers>
- configuration>
代码如下:
- package com.itheima.test;
-
- import com.itheima.domain.Emp;
- import com.itheima.mapper.EmpMapper;
- import com.itheima.util.MybatisUtil;
- import org.apache.ibatis.session.SqlSession;
- import org.junit.Test;
-
- import java.time.LocalDate;
- import java.time.LocalDateTime;
- import java.util.Arrays;
- import java.util.List;
-
- public class EmpMapperTest {
-
- // 测试查询所有
- @Test
- public void testFindAll(){
-
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
- List
empList = empMapper.findAll(); - for (Emp emp : empList) {
- System.out.println(emp);
- }
- MybatisUtil.close(sqlSession);
- }
- // 测试结果集映射开启驼峰命名规则
- @Test
- public void testFindAll1(){
-
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
- List
empList = empMapper.findAll1(); - for (Emp emp : empList) {
- System.out.println(emp);
- }
- MybatisUtil.close(sqlSession);
- }
- // 测试结果集映射起别名
- @Test
- public void testFindAll2(){
-
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
- List
empList = empMapper.findAll2(); - for (Emp emp : empList) {
- System.out.println(emp);
- }
- MybatisUtil.close(sqlSession);
- }
- // 测试结果集映射手动结果映射@Results @Result
- @Test
- public void testFindAll3(){
-
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
- List
empList = empMapper.findAll3(); - for (Emp emp : empList) {
- System.out.println(emp);
- }
- MybatisUtil.close(sqlSession);
- }
- // 测试条件查询
- @Test
- public void testFindCondition(){
-
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
- List
empList = empMapper.findByCondition("张三丰",1, LocalDate.of(2000,1,1),LocalDate.of(2020,1,1)); - for (Emp emp : empList) {
- System.out.println(emp);
- }
- MybatisUtil.close(sqlSession);
- }
- // 测试模糊查询
- @Test
- public void testFindCondition2(){
-
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
- List
empList = empMapper.findByCondition2("张",1, LocalDate.of(2000,1,1),LocalDate.of(2020,1,1)); - for (Emp emp : empList) {
- System.out.println(emp);
- }
- MybatisUtil.close(sqlSession);
- }
- // 测试根据id查询
- @Test
- public void testFindById(){
-
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
- Emp emp1 = empMapper.findById(4);
- System.out.println(emp1);
- MybatisUtil.close(sqlSession);
- }
-
- //条件查询
- @Test
- public void testFindByCondition() {
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
-
- //List
empList = empMapper.findByCondition3("张", (short) 1, LocalDate.of(2002, 01, 01), LocalDate.of(2023, 12, 31)); - //List
empList = empMapper.findByCondition3("张", (short) 1, null, null); - List
empList = empMapper.findByCondition3("", (short) 1, null, null); - empList.forEach(e -> System.out.println(e));//lambda方式打印
-
- MybatisUtil.close(sqlSession);
- }
-
- //更新
- @Test
- public void testUpdate() {
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
-
- Emp emp = new Emp();
- emp.setId(2);
- emp.setUsername("haha2");
- emp.setName("sdnajn");
- emp.setGender( (short) 1);
- emp.setImage("haha.jpg");
- emp.setJob((short) 2);
- emp.setDeptId(1);
- emp.setCreateTime(LocalDateTime.of(2023, 1, 1, 1, 1,1));
- emp.setUpdateTime(LocalDateTime.now());
-
- empMapper.update(emp);
-
- MybatisUtil.close(sqlSession);
- }
-
- //批量删除
- @Test
- public void deleteByIds() {
- SqlSession sqlSession = MybatisUtil.getSqlSession();
- EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
-
- empMapper.deleteByIds(Arrays.asList(13, 14, 15));
-
- MybatisUtil.close(sqlSession);
- }
-
- }
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
-
- <groupId>com.itheimagroupId>
- <artifactId>day04-01-mybatisartifactId>
- <version>1.0-SNAPSHOTversion>
-
- <properties>
- <maven.compiler.source>17maven.compiler.source>
- <maven.compiler.target>17maven.compiler.target>
- properties>
-
- <dependencies>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>8.0.28version>
- dependency>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.5.9version>
- dependency>
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.13.2version>
- <scope>testscope>
- dependency>
-
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <version>1.18.26version>
- dependency>
- dependencies>
-
- project>
以上就是今天学习的内容。