一、入门使用步骤
1.pom.xml添加相关依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
2.配置 Mybatis-config.xml
这个文件用于解决 jdbc 对于数据库链接、用户名密码等的硬编码问题。
<?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>
<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://127.0.0.1/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载sql映射文件-->
<mapper resource="HeroMapper.xml"/>
</mappers>
</configuration>
注意到,新版本下 java-connection-mysql 驱动名称变为了 com.mysql.cj.jdbc.Driver ,不再是以前的 com.mysql.jdbc.Driver
3.实现 POJO 类
用于对应数据库中的表,比如说我们有 Hero 这个表
id | name | hp | damage |
---|---|---|---|
1 | 盖伦 | 3000 | 800 |
2 | 亚索 | 2000 | 1200 |
那么我们就要构造一个符合JavaBean的实体类来保存表中数据,用于读取或修改数据表。
查询过程就是:Mybatis 帮你把表中数据存放到 Hero 实体中; 你修改 Hero 实体;Mybatis 再把修改好的实体里的属性放回 Hero 表中。 Hero 类就成为 Mybatis 帮助你和数据库交流的中介。
修改、增加数据同理。
public class Hero {
private int id;
private String name;
private float hp;
private int damage;
public Hero() {
}
public Hero(int id, String name, float hp, int damage) {
this.id = id;
this.name = name;
this.hp = hp;
this.damage = damage;
}
/**
* 获取
* @return id
*/
public int getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return hp
*/
public float getHp() {
return hp;
}
/**
* 设置
* @param hp
*/
public void setHp(float hp) {
this.hp = hp;
}
/**
* 获取
* @return damage
*/
public int getDamage() {
return damage;
}
/**
* 设置
* @param damage
*/
public void setDamage(int damage) {
this.damage = damage;
}
public String toString() {
return "Hero{id = " + id + ", name = " + name + ", hp = " + hp + ", damage = " + damage + "}";
}
}
一定要符合JavaBean标准,这样 Mybatis 才会自动隐式地为我们调用 get() set() 方法获取和设置值。
4.配置对应数据表的mapper.xml
把 Hero 表需要用到的 sql 语句配置在 HeroMapper.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">
<!--namespace: 命名空间-->
<mapper namespace="Hero">
<select id="selectAll" resultType="entity.Hero">
select * from hero;
</select>
<delete id="deleteById" parameterType="entity.Hero">
delete from hero where id = #{id};
</delete>
</mapper>
配置好在 config 文件中导入
配置好我们就可以通过 SqlSession 对象来调用 sql 语句了
// 1.加载配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2.获取 sqlSessionFactory 对象来执行 sql
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3.执行 sql
List<Hero> Heros = sqlSession.selectList("Hero.selectAll");
for (Hero hero : Heros) {
System.out.println(hero.toString());
}
// 删掉 id=11 的英雄
Hero gailun = new Hero();
gailun.setId(11);
sqlSession.delete("Hero.deleteById", gailun.getId());
二、Mapper 代理开发
目的还是为了
- 解决硬编码
- 简化sql调用
1.构建 Mapper 和同名 xml 文件
在 resources 中创建层次结构要用/分隔,而不是 . 用点分隔不会产生层次结构,而是被当作一个叫 com.zihao.mapper 的目录
使用同名层次结构,maven 编译后会自动把 HeroMapper 和HeroMapper.xml 编译在同目录下
2.编辑Mapper接口
在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
// HeroMapper.java 接口文件
package com.zihao.mapper;
import com.zihao.entity.Hero;
import java.util.List;
public interface HeroMapper {
List<Hero> selectAll();
}
<!--HeroMapper.xml 中对应的sql语句 注意命名空间要选择mapper所在位置-->
<mapper namespace="com.zihao.mapper.HeroMapper">
<select id="selectAll" resultType="com.zihao.entity.Hero">
select * from hero;
</select>
<delete id="deleteById" parameterType="com.zihao.entity.Hero">
delete from hero where id = #{id};
</delete>
</mapper>
// mybatis-config.xml 也需要修改
<mappers>
<!--加载sql映射文件-->
<!--<mapper resource="com/zihao/mapper/HeroMapper.xml"/>-->
<!--包扫描方式添加映射,就不用向上面那样一条一条加,系统自动扫描加载所有mapper.xml-->
<package name="com.zihao.mapper"/>
</mappers>
3.代码实现
// 1.加载配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2.获取 sqlSessionFactory 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3.使用代理对象HeroMapper执行 sql
HeroMapper heroMapper = sqlSession.getMapper(HeroMapper.class);
List<Hero> Heros = heroMapper.selectAll(); // 调用刚刚接口中定义的方法
listAll(Heros);
三、参数传递
1、SQL中的参数传递通常有 ${} 和 #{} 两种方式
${} 实际上是对SQL做拼接,不推荐使用,有可能产生SQL注入问题
#{} 会将对应位置替换为 ? 可以有效防止SQL注入攻击
参数类型 parameterType 通常可以省略
2、SQL中设置多个参数
- 散装参数
- 使用 @param 注解对应SQL中的占位符名称
- 实体类封装参数
- 需要实体类的属性名和SQL中的参数占位符相同
- map 集合传递参数
- map 集合的键名称与SQL中的参数名对应即可
四、特殊字符处理
1.转义字符
特殊字符少时使用
select *
from table
where age < 60;
# 取出年龄小于60的数据, <是 < 的转义字符
2.CDATA区
特殊字符多时使用
select *
from table where age
<![CDATA[
<
]]>
60;
标签:Hero,name,hp,damage,笔记,id,Mybatis,public
From: https://www.cnblogs.com/libayu/p/17278129.html