06-MyBatis框架之初识MyBatis与MyBatis核心配置
MyBatis框架也被称之为ORM(Object/Relation Mapping,即对象关系映射)框架
一、MyBatis
1、MyBatis资源下载和使用
MyBatis下载链接地址: https://github.com/mybatis/mybatis-3/releases
注意:MyBatis3.5及以上版本只能使用MySQL8.0驱动,在使用MySQL8.0驱动时,需通过serverTimezone修改时区为东八区
与MySQL8.0驱动配合使用:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai
8.0驱动:xml路径配置
报错1
org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: No timezone mapping entry for ‘Asia/Shanghai;characterEncoding=utf8’
解决----只要写时区的,必要写字符编码的
<!-- 1.1配置数据库驱动8.0 -->
<property name="driverClassName"
value="com.mysql.cj.jdbc.Driver" />
<!-- 1.2配置数据库URL8.0和需通过serverTimezone修改时区为东八区 -->
<property name="url"
value="jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Shanghai" />
2、MyBatis-持久岑
1.注意:
MyBatis3.4配合用数据库5.0或者8.0的驱动包都可以,但是MyBatis3.5以上的,只能用8.0的数据库驱动包
2.MyBatis框架也被称之为ORM(Object/Relation Mapping,即对象关系映射)框架。
所谓的ORM就是一种为了解决面向对象与关系型数据中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。
3.为什么要用MyBatis:
java是先编译后部署语言,如果sql底层改变,Java代码必须改,服务就必须停下,会导致网站在维修时服务器不可用,会很麻烦。
用MyBatis解决此问题,映射基础(Hibernate与MyBatis:对象关系映射的框架)
4.Hibernate和MyBatis有什么区别?
Hibernate:全自动,可控制性和可操作性大大降低
MyBatis:半自动映射的框架,需要手动写sql命令,可控性好
5.导入12个jar包
二、以客户关系管理系统为例(增删改查)
1、增(例:添加客户)
添加操作是通过元素来实现的。例如,向数据库中的t_customer表中插入一条数据可以通过如下配置来实现。
<insert id="addCustomer" parameterType="cn.hnkjxy.po.Customer">
insert into t customer(usermame,jobs,phone)values(# {username} ,# {jobs} ,# {phone})
</insert>
2、删(例:删除客户)
删除操作在映射文件中是通过配置元素来实现的。
<delete id="deleteCustomer" parameterType="Intaeger">
delete from t_ customer where id=# {id}
</delete>
3、改(例:更新客户信息)
更新操作在映射文件中是通过配置元索来实现的。
<update id="updateCustomer" parameterType-*cn.hnkjxy.po.Customer">
update t _customer set username=# {username} jobs=# {jobs} ,phone=# {phone} where id=# {id}
</update>
在测试类MybatisTest中,添加测试方法updateCustomerTestO, .将id为4的用户职业修改为programmer,电话修改为111111
public void updateCustomerTestO throws Exception{
...
Customer customer = new Customer(;
customer.setld(4);
customer.setUsername("rose");
customer.setJobs("programmer");
customer.setPhone("131111111");
int rows = sqlSession.update("*cn.hnkjxy.mapper"
+ ".CustomerMapperupdateCustomer", customer);
...
4、创建数据库,查询客户
三、MyBatis帮助文档的使用(如何配置一个MyBatis项目)
1、打开MyBatis帮助文档,找到目录
2、如何写log4j.properties(日志)文件(放在根目录下)
1.日志文件中强制要求导入的jar包
2.日志文件的配置和存放位置(classpath-类路径:src)
代码
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.需要修改的部分
3、mybatis-config.xml(配置名字可改)文件(放在根目录下,src),配置数据库
1.mybatis-config.xml(配置文件,名字可以改,知识约定俗成写mybatis-config.xml)放在src下
2.配置文件代码和要注意的地方
代码
<?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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
3.要修改的地方和易错注意
4、如何写xxxxMapper.xml(映射)文件(放在mapper文件夹下),sql语句编写,替代了dao层
1.映射文件,放在映射文件夹(mapper)下
代码
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
2.注意事项
5、需要导入的MyBatis的jar包
四、对象关系映射框架
1、测试步骤:
// 1.读取配置文件
// 2.根据配置文件,创建会话工厂
// 3.通过会话工厂,获取会话对象,进行数据的增删改查的操作
// 4.使用会话对象,执行映射文件中的SQL命令,返回映射结果对象--按照姓名username 模糊查找客户
// 5.输出结果
// 6.关闭会话对象
2、功能
在创建好项目的基础再增加·一个功能,只需要2步
1.在mapper映射文件中添加一条sql命令和对应的select
2.在测试文件中,在测试类中添加一个单元测试,在持久化删改查出有修改即可
模糊匹配要用拼接字符串,不能用参数(不能#定位:变量的值)
or 1#:or或,1-true真,#注释-----字符串拼接会被攻击
$:用于拼接字符串
<!-- sql防注入攻击的方式,不用拼接字符串 -->
SELECT * FROM t_customer WHERE username LIKE concat('%',#{value},'%')
<!-- $拼接字符串 -->
<!-- SELECT * FROM t_customer WHERE username LIKE '%${value}%' -->
五、MyBatis核心对象(2个)
1、SqlSessionFactory
(1)什么是SqlSessionFactory:
●SqlSessionF actory是MyBats框架中十分重要的对象.它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession.
●SiSessonF actory对象的实例可以通过SqISessionF actoryBulder对象来构建,而SqISessionFactory Builder则可以通过XML.配置文件或-一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。
(2)构建SqlSessionFactory
●通过XML配置文件构建出的SqlSessionFactory实例现代码如下:
InputStream inpuStean = Resources getResourceAsStream("配置文件位置"):
SqlSessinFactory sqISessionF actory =new SqlSessionF actory BuilderO builinputStream);
●SqlSessionFactory对象是线程安全的,它一旦被创建, 在整个应用执行期间都会存在。如果我们多次的创建同一个数据库的SqlSessionFactory, .那么此数据库的资源将很容易被耗尽。为此,通常每一个数据库都会只对应一个SiSessionFactory, 所以在构建SqlSessionF actoly实例时,建议使用单例模式。
2、SqlSession
(1)什么是SqlSession?
●SqlSession是MyBatis框架中另一个重要的对象, 它是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。
●每一个线程都应该有一个自己的Sqlession实例, 并且该实例是不能被共享的。同时,SqlSession实例也 是线程不安全的,因此其使用范围最好在一次请求或一个方法中,绝不能将其放在一个类 的静态字段、实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。
(2)SqlSession中的方法
查询方法:
//查出来只有一个对象的
<T> T selectOne(String statement);
<T> T sclectOne(String statement, Object paramcter);
//查出来只有多个对象的
<E> List<E> selectLit(String statemen);
<E> List<E> selectList(String statement. Object parameter);
//通用,不知道查出来的结果有多个条,需要手动写结果集
<E> List<E> selectList(String statement, Object parameter,RowBounds rowBounds);
void select(String statement, Object parameter, ResulHandler handler);
SqlSession中的其他方法:
void commitO; //提交事务的方法。
void rollback);//回滚事务的方法。
void close(); //关闭SqlSession对象。
<T> T getMapper(Class<T> type);//返回Mapper接口的代理对象。
Conmection getConmection0;//获取JDBC收据库连接对象的方法。