关键词:
Mybatis的核心组件:
- SqlSeeeionFactoryBuilder (构建器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分布构建的Builder模式;
- SqlSessionFactory:依靠它来生成SqlSession,使用的是工厂模式。
- SqlSession(会话)发送SQL执行并返回结果,也可以获取Mapper接口。
- SQL Mapper(映射器): 由一个java接口和XML文件(或注解)构成,需要给出SQL的映射规则。它负责发送SQL去执行返回结果。
1.使用XML:mybatis-config.xml创建SqlSessionFactory的配置;
<?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> <typeAliases><!-- 别名 --> <typeAlias alias="role" type="com.learn.ssm.chapter3.pojo.Role"/> </typeAliases> <!-- 数据库环境 --> <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://localhost:3306/ssm"/> <property name="username" value="root"/> <property name="password" value="admin123"/> </dataSource> </environment> </environments> <!-- 映射文件 --> <mappers> <mapper resource="com/learn/ssm/chapter3/mapper/RoleMapper.xml"/> <mapper class="com.learn.ssm.chapter3.mapper.RoleMapper2"/> </mappers> </configuration>
1.1 使用代码或xml创建SqlSessionFactory
package com.learn.ssm.chapter3.utils; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.datasource.pooled.PooledDataSource; import org.apache.ibatis.io.Resources; import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.transaction.TransactionFactory; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import com.learn.ssm.chapter3.mapper.RoleMapper; import com.learn.ssm.chapter3.mapper.RoleMapper2; import com.learn.ssm.chapter3.pojo.Role; public class SqlSessionFactoryUtils { private final static Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class; private static SqlSessionFactory sqlSessionFactory = null; private SqlSessionFactoryUtils() { } public static SqlSessionFactory getSqlSessionFactory() { synchronized (LOCK) { if (sqlSessionFactory != null) { return sqlSessionFactory; } String resource = "mybatis-config.xml"; InputStream inputStream; try { inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); return null; } return sqlSessionFactory; } } //代码生成SqlSessionFactory public static SqlSessionFactory getSqlSessionFactory2() { synchronized (LOCK) { //数据库连接池信息 PooledDataSource dataSource = new PooledDataSource(); dataSource.setDriver("com.mysql.jdbc.Driver"); dataSource.setUsername("root"); dataSource.setPassword("admin123"); dataSource.setUrl("jdbc:mysql://localhost:3306/ssm"); dataSource.setDefaultAutoCommit(false); //采用MyBatis的JDBC事务方式 TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); //创建Configuration对象 Configuration configuration = new Configuration(environment); //注册一个MyBatis上下文别名 configuration.getTypeAliasRegistry().registerAlias("role", Role.class); //加入一个映射器 configuration.addMapper(RoleMapper.class); configuration.addMapper(RoleMapper2.class); //使用SqlSessionFactoryBuilder构建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); return sqlSessionFactory; } } public static SqlSession openSqlSession() { if (sqlSessionFactory == null) { getSqlSessionFactory(); } return sqlSessionFactory.openSession(); } }
2. 映射器,由一个java接口和XML文件(或注解)构成
首先定义一个POJO
package com.learn.ssm.chapter3.pojo; public class Role { private Long id; private String roleName; private String note; /** setter and getter **/ public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } }
2.1, 接口和XML实现映射
映射器接口:
public interface RoleMapper { public int insertRole(Role role); public int deleteRole(Long id); public int updateRole(Role role); public Role getRole(Long id); public List<Role> findRoles(String roleName); }
在XML创建SqlSession中有这样代码
<mapper resource="com/learn/ssm/chapter3/mapper/RoleMapper.xml"/>
引入XML(RoleMapper.xml)创建映射器(insert/select/update/delete)代表增/查/改/删
id 代表RoleMapper中方法名字
parameterType代表传入参数类型
resultType代表返回值 "role"是别名,代表<typeAlias alias="role" type="com.learn.ssm.chapter3.pojo.Role"/>
<?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.learn.ssm.chapter3.mapper.RoleMapper"> <insert id="insertRole" parameterType="role"> insert into t_role(role_name, note) values(#{roleName}, #{note}) </insert> <delete id="deleteRole" parameterType="long"> delete from t_role where id= #{id} </delete> <update id="updateRole" parameterType="role"> update t_role set role_name = #{roleName}, note = #{note} where id= #{id} </update> <select id="getRole" parameterType="long" resultType="role"> select id, role_name as roleName, note from t_role where id = #{id} </select> <select id="findRoles" parameterType="string" resultType="role"> select id, role_name as roleName, note from t_role where role_name like concat(‘%‘, #{roleName}, ‘%‘) </select> </mapper>
2.2注解实现映射器
XML中引入Mapper:
<mapper class="com.learn.ssm.chapter3.mapper.RoleMapper2"/>
public interface RoleMapper2 { @Select("select id, role_name as roleName, note from t_role where id=#{id}") public Role getRole(Long id); @Insert("insert into t_role(role_name,note) values(#{roleName},#{note})") public void insertRole(Role role); }
注解不易于维护
3. 测试:
public class Chapter3Main { public static void main(String[] args) { testRoleMapper(); testRoleMapper2(); } //xml 测试 private static void testRoleMapper() { Logger log = Logger.getLogger(Chapter3Main.class); SqlSession sqlSession = null; try { sqlSession = SqlSessionFactoryUtils.openSqlSession(); RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); Role role = roleMapper.getRole(1L); Role r1 = new Role(); r1.setRoleName("testRole name"); r1.setNote("note..."); roleMapper.insertRole(r1); sqlSession.commit(); log.info(role.getRoleName()); } catch(Exception ex) { sqlSession.rollback(); } finally { if (sqlSession != null) { sqlSession.close(); } } } //注解SQL测试 private static void testRoleMapper2() { Logger log = Logger.getLogger(Chapter3Main.class); SqlSession sqlSession = null; try { sqlSession = SqlSessionFactoryUtils.openSqlSession(); RoleMapper2 roleMapper2 = sqlSession.getMapper(RoleMapper2.class); Role role = roleMapper2.getRole(1L); Role r1 = new Role(); r1.setRoleName("testRole name map2"); r1.setNote("note..."); roleMapper2.insertRole(r1); sqlSession.commit(); log.info(role.getRoleName()); } catch(Exception ex) { sqlSession.rollback(); } finally { if (sqlSession != null) { sqlSession.close(); } } } }
mybatis的优缺点及应用场合
mybatis框架的优点与jdbc相比,减少了50%以上的代码量mybatis是最简单的持久化框架,小巧简单且易学mybatis想到灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在xml里,从程序代码中彻底分离,降低耦合度,便于统一管理和... 查看详情
mybatis的原理及应用
MyBatis是一个基于Java的持久层ORM关系映射框架,是一种支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。它避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或... 查看详情
springboot工程中mybatis框架的应用
MyBatis概述1)优秀的持久层框架?(持久层:负责将内存中的对象存储到数据库的那一层对象(DAO).2)最大的优势?(能够低成本的快速实现数据库中的数据操作)2.1)开源(免费-成本低)2.2)简单(操作步骤,参数映射,结果映射)2.4)灵活(动态SQL-可... 查看详情
mybatis入门要素
...代码,可以比较完全的掌握它的设计思路和实现。灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。解除sql与程序代码的耦合:... 查看详情
mybatis源码分析五mybatis的缓存
五、MyBatis缓存文章目录五、MyBatis缓存缓存的概念与应用缓存的概念开发一个简单的缓存MyBatis中的缓存设计自定义一个Cache实现类MyBatis中的Cache实现类PerpetualCache装饰器CacheCache如何在MyBatis运行过程应用MyBatis缓存的二层体系一级... 查看详情
mybatis源码分析五mybatis的缓存
五、MyBatis缓存文章目录五、MyBatis缓存缓存的概念与应用缓存的概念开发一个简单的缓存MyBatis中的缓存设计自定义一个Cache实现类MyBatis中的Cache实现类PerpetualCache装饰器CacheCache如何在MyBatis运行过程应用MyBatis缓存的二层体系一级... 查看详情
eclipse创建一个简单的mybatis项目
...中创建com.demo.po,com.demo.mapper,com.demo.dao三个包,并创建MyBatis框架配置文件mybatis-config.xml文件,在mapper目录下创建数据实体映射文件CommodityStorageMapper.xml,在po目录下创建名为CommodityStorage的实体类。如下图所示: 转载文章链... 查看详情
使用springboot简单整合springsecurity和mybatis-plus(代码片段)
1、概述SpringSecurity是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。SpringSecurity是一个框架,致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Sprin... 查看详情
mybatis简单的mybatis增删改查模板
简单的mybatis增删改查模板:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.suneee.sc 查看详情
mybatis中#和$的区别及应用场景
参考技术A动态sql是mybatis的主要特性之一,在mapper中定义的参数传到xml中之后,在查询之前mybatis会对其进行动态解析。mybatis为我们提供了两种支持动态sql的语法:#以及$。如:#:根据参数的类型进行处理,比如传入String类型,... 查看详情
mybatis简介
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(PlainOldJavaObjects,普通的Java... 查看详情
mybatis简单入门
1、Mybatis概述 MyBatis是支持普通SQL查询(相比较于Hibernate的封装,Mybatis是半自动化的JDBC封装,一个特点就是Mybatis执行的SQL查询语句需要自己在配置文件中写),存储过程和高级映射的优秀持久层框架。MyBatis消除了... 查看详情
mybatis简单入门
1、Mybatis概述 MyBatis是支持普通SQL查询(相比较于Hibernate的封装,Mybatis是半自动化的JDBC封装,一个特点就是Mybatis执行的SQL查询语句需要自己在配置文件中写),存储过程和高级映射的优秀持久层框架。MyBatis消除了... 查看详情
mybatis简单了解
MyBatis是什么? MyBatis是一个简化和实现了Java数据持久化层(persistencelayer)的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互。MyBatis的前身是iBATIS,iBATIS于2002年由ClintonBegin创建。MyBatis3是iBATIS的... 查看详情
mybatis入门学习
一、MyBatis入门简要介绍(百科) MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接... 查看详情
mybatis-03-简单配置mybatis
四、配置MyBatis4.1核心配置文件——mybatis-config.xmlMyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息。配置文档的顶层结构如下:configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类... 查看详情
mybatis学习笔记一:mybatis最简单的环境搭建
MyBatis的最简单环境的搭建,使用xml配置,用来理解后面的复杂配置做基础1.环境目录树(导入mybatis-3.4.1.jar包即可,这里是为后面的环境最准备使用了web项目,如果只是做mybatis的环境,普通java项目即可 ) 2.Person.java(纯POJO对象... 查看详情
什么是mybatis框架
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(PlainOrdinaryJav... 查看详情