1.Mybatis简介
mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
(Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了)
2.Mybatis环境搭建
maven依赖导入
<!--mybatis坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql驱动坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
<!--单元测试坐标-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--日志坐标-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
Log4j.properties配置
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# 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
sqlMapConfig.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>
<properties resource="数据库参数文件路径"></properties>
<typeAliases><!--别名-->
<typeAlias type="com.wzx.bean.User" alias="user"></typeAlias><!--给个别包起别名 -->
<!-- 包扫描器 使用后可在映射文件中的使用别名,别名为类的首字母小写,给包下的所有类起别名 -->
<package name="包名"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${database.driver}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ssm/chapter14/mapper/RoleMapper.xml"></mapper>
</mappers>
</configuration>
映射文件mapper.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="com.ssm.chapter14.dao.RoleDao">
<select id="getRole" parameterType="long" resultType="com.ssm.chapter14.pojo.Role">
select id, role_name as roleName, note from t_role where id = #{id}
</select>
</mapper>
数据库连接参数jdbc.properties
driver=com.mysql.jdbc.Driver
username=root
password=123456
url=jdbc:mysql://localhost:3306/day13?characterEncoding=utf-8
3.Mybatis的操作步骤
(1)mybatis开发流程
1 创建SqlSessionFactoryBuilder对象
2 创建SqlSessionFactory对象
3 加载SqlMapConfig.xml配置文件
4 创建SqlSession对象
5 执行SqlSession方法操作数据库
6 打印结果
7 释放资源
Mybatis主要的工作是xml文件的配置与sqlSession的映射xml文件执行sql语句
sqlSession工具类
public class MySessionUtils {
private static SqlSessionFactory sessionFactory;
//static 静态代码,在类加载的时候执行一次,且只执行一次
static{
//1 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2 创建SqlSessionFactory对象
//3 加载SqlMapConfig.xml配置文件
InputStream inputStream = MySessionUtils.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
sessionFactory = sqlSessionFactoryBuilder.build(inputStream);//加载核心配置文件 参1 输入流
}
public static SqlSession getSession() {
//4 创建SqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
return sqlSession;
}
}
简单使用:
映射文件RoleMapper.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">
<!-- map的约束文件-->
<!-- namespace 命名空间 防止id冲突找不到正确的id-->
<!-- id Mybatis是将sql语句写在xml文件中,以后session根据namesapce.id 合在一起获取sql-->
<!-- 在jdbc中,sql语句使用?作占位符,但在mybatis #{id}-->
<mapper namespace="com.wzx.bean.User">
<delete id="deleteById" parameterType="int" >
delete from user where id = #{id}
</delete>
</mapper>
需要在配置文件中声明,在配置文件中添加
<mappers>
<mapper resource="com/ssm/chapter14/mapper/RoleMapper.xml"></mapper>
</mappers>
测试类调用
public class Test02Myabatis {
@Test
public void test01(){
SqlSession sqlSession = MySessionUtils.getSession();
// 》5 执行SqlSession对象执行删除
System.out.println(sqlSession);
//delete from user where id = ?
sqlSession.delete("com.wzx.bean.User.deleteById",24);//执行删除 参1 是namespace.id 参2 参数值
// 》6 打印结果
// 》7 释放资源
sqlSession.commit();//mybatis的session不会自动提交,必须手动提交
sqlSession.close();
}
}