–1,概述
底层封装了JDBC , 对数据库可以进行操作 , 是一个优秀的ORM对象关系映射持久层框架
好处: 简化了JDBC的开发步骤, 自动完成ORM映射 表里字段的值封装给对象
pom.xml,添加jar包
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency>
创建核心配置文件mybatis-config.xml
<?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"> <!-- mybatis的核心配置文件 事务管理,数据源--> <configuration> <environments default="test"> <environment id="test"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf8&serverTimezone=Asia/Shanghai" /> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments><!--引入映射文件--> <mappers> <mapper resource="UserMapper.xml"></mapper> </mappers> </configuration>
创建映射文件UserMapper.xml,写SQL
<?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"> <!--写SQL--> <mapper namespace="userMapper"> //id是唯一标识,resltType的值用来封装查到的结果,ORM <!--查询id=1 --> <select id="getById" resultType="cn.tedu.pojo.User"> select * from user where id=1; </select> </mapper>
创建User类
package cn.tedu.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import org.springframework.beans.factory.annotation.Autowired; //数据库保持一致 @Data @NoArgsConstructor @AllArgsConstructor @Accessors(chain =true) public class User { private Integer id; private String name; private String addr; private Integer age; }
测试类
package cn.tedu.test;
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.jupiter.api.Test;import java.io.IOException;
import java.io.InputStream;
public class Test1 {
@Test
public void get() throws IOException {
InputStream in = Resources.getResourceAsStream(
"mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(in);
SqlSession session = factory.openSession();Object o = session.selectOne("userMapper.getById");
//User(id=1, name=hanmeimei, addr=北京, age=28)
System.out.println(o);
}
}
Mybatis的练习
namespace 作为一个mapper.xml的唯一标识
面试题:SQL动态获取参数时,可以用#或者$
$底层用了低级传输器,可能发生sql注入攻击,低效,不拼串,可能发生sql语法错误。
#底层用了高级传输器,安全,高效,会自动拼接字符串
<!--配置别名,给指定类起一个指定的别名 mybabi configuration 下配置-->
<typeAliases>
<typeAlias type="cn.tedu.pojo.User" alias="User"></typeAlias>
</typeAliases>
接口开发
动态SQL
–1,概述
利用mybatis框架提供一些标签,完成SQL的拼接
常用标签 :
sql : 提取SQL片段
include : 引入指定的SQL片段
if : 用来判断,满足条件才拼接SQL
<?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="cn.tedu.dao.DeptMapper">
<!-- 提取SQL片段,提高SQL片段复用性 -->
<sql id="cols">
id,dname,loc
</sql>
<!-- 引用SQL片段 -->
<select id="getByName" resultType="Dept">
select
<include refid="cols"></include>
from dept
<if test="dname != null">
where dname=#{dname}
</if>
</select>
<!--id=接口里的方法名-->
<select id="getById" resultType="Dept">
select
<include refid="cols"></include>
from dept where id=1
</select><!--新增部门记录-->
<insert id="save">
insert into dept values(#{id},#{dname},#{loc})
</insert>
</mapper>