MyBatis是简化JDBC开发的一款优秀的持久型框架
javaEE三层架构:表现层 业务层 持久层
表现层:是将结果展示到页面上的那一层代码
业务层:应用程序的核心逻辑,负责处理业务流程和实现业务规则
持久层就是负责将数据保存到数据库的那一层代码
mybatis官网
一,MyBatis的快速入门
1.首先在pom.xml中导入mybatis依赖
2.在resources创建一个名为mybatis-config,xml的配置文件,写入以下代码
image.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///db1?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载sql映射文件-->
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
第三步 你如果想操作数据库中的那个表 ,就对应在resources目录下创建xml的文件
image.png
放以下代码
<?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="111">
//id是sql语句的唯一标识 resultType是返回结果的类型
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
第四步 然后在测试类中写
public static void main(String[] args) throws Exception {
//1.加载mybatis的核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2 获取SqlSession对象 用来执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql,返回list集合
List<Emp> emps = sqlSession.selectList("one.selectAll");
System.out.println(emps);
sqlSession.close();
}
二,使用Mapper代理的形式来执行sql语句
目的是解决原生方式的硬解码,简化后期执行sql
-
1 定义与SQL映射文件同名的Mapper接口,要放在同一目录下.
放在同一目录下
但为什么不放在一个文件夹呢 ,因为这样方便管理,配置文件统一用配置文件夹下
注意事项 -
2 设置SQL映射文件的namespace属性为Mapper接口全限定名
image.png -
3 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
image.png - 4编码
//获取empMapper接口的代理对象
empMapper mapper = sqlSession.getMapper(empMapper.class);
List<Emp> emps = mapper.selectAll();
System.out.println(emps);
sqlSession.close();
<!-- 加载sql映射文件 操作一个表就需要引入一个 -->
<!-- <mapper resource="com/it/Mapper/empMapper.xml"/>-->
<!-- mapper代理方式加载 不管你管理多少表 我都会从这个mapper包下拿到 -->
<package name="com.it.Mapper"/>
2.3 配置文件完成增删改查
首先安装一个mybatisX插件
1 可以方便我们在接口和配置文件中切换
2 根据接口方法自动在配置文件中生成标签(statement)
image.png
2.4 查询所有数据
查询的时候数据库字段名和pojo实体类属性名称需要一致,要不然不能自动封装数据
但可以在SQL语句中添加别名来跟pojo定义的实体类属性名一致
缺点每次查询都要写别名很麻烦
resultMap
- 1 定义<resultMap>标签
- 2 在<select>标签中,使用resultMap属性替换,resultType属性
2.5 查询详细数据
根据id判断那条数据的详细信息
image.png
{}参数占位符防止sql注入问题
sql语句的特殊字符不可以识别,所以可以使用CDATA区
<![CDATA[
<
]>
多条件查询
2.6 动态sql
如我们多条件查询的时候,比如要查名字为华为,价格大于3000的手机,此时我们的SQL语句是
select * from brand where brand_name = '华为' and price > 3000;
那么当用户只输入一个条件而不输出另一个条件时,这条SQL语句就会崩掉
所以提供了
if
choose (when, otherwise)
trim (where, set)
foreach
select * from brand
<where>
<if test=" brand_name!=null and brand_name!=' ' ">
brand_name = '华为'
</if>
<if test=" price!= null ">
and price > 3000;
</if>
</where>
- if条件判断
- test 逻辑表达式
2.7添加数据
image.png2.8主键返回
就是当添加到数据库的数据我们就拿不到他的id信息了
比如订单和订单项的关联
添加订单项需要设置所属的订单id
image.png
2.9修改
-
1修改全部字段
修改全部字段 -
2 修改动态字段
image.png
2.10删除功能
删除根据id删除
image.png
网友评论