MyBatis是一款优秀的持久层框架,用于简化JDBC开发
持久层:
负责将数据到保存到数据库的那一层代码
JavaEE三层架构:表现层、业务层、持久层
框架:
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
在框架的基础之上构建软件编写更加高效、规范、通用、可扩展
1,模板
其中:
(1)logback.xml
XML
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
CONSOLE :表示当前的日志信息是可以输出到控制台的。
-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>【%level】 %blue(%d{HH:mm:ss.SSS}) %cyan(【%thread】) %boldGreen(%logger{15}) - %msg %n</pattern>
</encoder>
</appender>
<logger name="com.itheima" level="DEBUG" additivity="false">
<appender-ref ref="Console"/>
</logger>
<root level="DEBUG">
<appender-ref ref="Console"/>
</root>
</configuration>
(2)mybatis-config.xml
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">
<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:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="111111"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
(3)UserMapper.xml
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="test">
<select id="selectAll" resultType="com.jaa.pojo.User">
select * from tb_user;
</select>
</mapper>
java
public class MyBatisDemo {
public static void main(String[] args) throws IOException{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
List<User> users=sqlSession.selectList("test.selectAll");
System.out.println(users);
sqlSession.close();
}
}
2,解决SQL映射文件的警告提示
产生原因:ldea和数据库没有建立连接,不识别表信息
解决方式:在ldea中配置MySQL数据库连接
3,Mapper代理开发
目的:
解决原生方式中的硬编码
简化后期执行SQL
java
List<User> users = sqlSession.selectList("test.selectAll");
//获取UserMapper接口的代理对象 UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<User> users=userMapper.selectAll();
XML
<typeAliases>
<package name="com.jaa.pojo"/>
</typeAliases>
XML
<select id="selectAll" resultType="user">
其中package name会简化resultType的代码,更加简洁
4,配置文件完成功能列表清单
要完成的功能列表清单:
1.查询
查询所有数据
查看详情
条件查询
2.添加
3.修改
修改全部字段
修改动态字段
4.删除
删除一个
批量删除
MybatisX是一款基于IDEA的快速开发插件,为效率而生。
主要功能:
XML和接口方法相互跳转
根据接口方法生成statement
5,查询
(1)查询所有
1.编写接口方法: Mapper接口
参数:无
结果:List<Brand>
2.编写SQL语句:SQL映射文件
3.执行方法,测试
java
@Test
public void testSelectAll() throws IOException {
//1.获取sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取SqlSessionFactory对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.获取Mapper的代理对象
BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);
//4.执行方法
List<Brand> brands=brandMapper.selectAll();
System.out.println(brands);
//5.释放资源
sqlSession.close();
}
实体类属性名和数据库表列名不一致,不能自动封装数据
1)起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样*可以定义<sql>片段,提升复用性
- resultMap:定义<resultMap>完成不一致的属性名和列名的映射
id:主键字段的映射
result:一般字段的映射
XML
<resultMap id="brandResultMap" type="brand">
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
</resultMap>
<select id="selectAll" resultMap="brandResultMap">
select
*
from tb_brand;
</select>
(2)查看详情
XML
<select id="selectById" resultMap="brandResultMap">
select *
from tb_brand where id=#{id};
</select>
参数占位符:
1.#{}:会将其替换成?,为了防止sql注入问题
2.${}:拼sql,会存在sql注入问题
3.使用时机:
参数传递的时候:#{}
表格或者列名不固定的情况下:${}
特殊字符处理:
1.转义文字:<替代成<
2.CDATA区:<替代成<![CDATA[ < ]]>