文章目录
- 介绍
- 持久层
- 框架
- Jdbc缺点
- Mybaties简化
- 整体框架
- ORM方式
- Mybaties快速入门(Mapper代理)
- 核心配置文件
- 映射文件配置
- 编写会话工具类
介绍
Mybaties是一款优秀的持久层框架,用于简化JDBC开发
持久层
- 负责将数据保存到数据库的那一层代码
- JavaEE三层架构:开发层,业务层,持久层
框架
- 框架就是一个半成品软件,是一套可重用的,通用的,软件基础代码模型
- 在框架的基础上构建软件编写更加高效,规范,通用,可扩展
Jdbc缺点
Mybaties简化
整体框架
ORM方式
Object Relational Mapping对象关系映射
Mybaties快速入门(Mapper代理)
- 先在数据库中创建表,并添加数据
- 创建maven工程,导入mysql,junit,mybaties坐标
- 在mian下面的resources下创建Mybaties核心配置文件config.xml,并将里面的代码换成自己数据库的
- mapper标签中resource为下面映射文件的全限定名
- 在main下面的java目录下创建Mapper接口
- 在main下面的resources下面创建和Mapper接口同名的SQL映射文件(比如第五步是com.itheima.dao.UserMapper,那么这一步在resources下创建com/itheima/dao/UserMapper.xml )
- 注:这里必须用/来分层,用.只会是一个连着的文件名,用/能确保接口和映射文件在同一目录下
- 在main下面的java创建实体类对象,对象的成员变量和第一步创建的表的字段一一对应(com.itheima.pojo.User)
- 在Mapper接口中定义方法,方法名是对应映射文件中标签的id,返回类型为实体对象的全限定名
- 编码进行执行
//mybaties坐标<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency>
// config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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://127.0.0.1:3306/db8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/itheima/dao/UserMapper.xml"/></mappers>
</configuration>
//SQL映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.itheima.dao.UserMapper"><select id="quaryUser" resultType="com.itheima.pojo.User">select id,name,sex from user</select>
</mapper>
//编码执行String file = "config.xml";InputStream is = Resources.getResourceAsStream(file);SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();//创建sqlf对象SqlSessionFactory sqlSessionFactory = ssfb.build(is);//创建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//执行sql语句,获取代理对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.quaryUser();for (User user : users) {System.out.println(user);}sqlSession.close();
核心配置文件
注:书写标签用遵循上图的顺序
- properties(属性)
加载外部的java文件(properties文件)
通过properties标签resource属性引入加载外部properties文件
使用${key}获取设置的属性值
- settings(设置)
还有很多可以去这里去找
- typeAliases(类型别名)
package:全部小写或者与类名一致
- typeHandlers(类型处理器)
这个可以将mysql中的varchar转换成java中的String
- environment(环境)
环境变量有开发(dev),测试(test),生产(prod)
事务管理器默认和jdbc的默认事务相同
数据源就是数据库连接池,使用的是POOLED
- mappers(映射器)
映射文件配置
- select标签
id = #{id}
- insert标签
- update标签
- delete标签
编写会话工具类
public class MybatiesUtil {private MybatiesUtil(){}private static SqlSessionFactoryBuilder ssfb = null;private static SqlSessionFactory sqlSessionFactory = null;static{try {InputStream is = Resources.getResourceAsStream("config.xml");ssfb = new SqlSessionFactoryBuilder();sqlSessionFactory= ssfb.build(is);} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession openSession(){return sqlSessionFactory.openSession();}public static SqlSession openSession(boolean flag){return sqlSessionFactory.openSession(flag);}public static void commit(SqlSession session){session.commit();session.close();}public static void rollback(SqlSession session){session.rollback();session.close();}
}