Mybatis的核心组件:

  • SqlSeeeionFactoryBuilder (构建器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分布构建的Builder模式;
  • SqlSessionFactory:依靠它来生成SqlSession,使用的是工厂模式。
  • SqlSession(会话)发送SQL执行并返回结果,也可以获取Mapper接口。
  • SQL Mapper(映射器): 由一个java接口和XML文件(或注解)构成,需要给出SQL的映射规则。它负责发送SQL去执行返回结果。

1.使用XML:mybatis-config.xml创建SqlSessionFactory的配置;

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <typeAliases><!-- 别名 -->
  6. <typeAlias alias="role" type="com.learn.ssm.chapter3.pojo.Role"/>
  7. </typeAliases>
  8. <!-- 数据库环境 -->
  9. <environments default="development">
  10. <environment id="development">
  11. <transactionManager type="JDBC"/>
  12. <dataSource type="POOLED">
  13. <property name="driver" value="com.mysql.jdbc.Driver"/>
  14. <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
  15. <property name="username" value="root"/>
  16. <property name="password" value="admin123"/>
  17. </dataSource>
  18. </environment>
  19. </environments>
  20. <!-- 映射文件 -->
  21. <mappers>
  22. <mapper resource="com/learn/ssm/chapter3/mapper/RoleMapper.xml"/>
  23. <mapper class="com.learn.ssm.chapter3.mapper.RoleMapper2"/>
  24. </mappers>
  25. </configuration>

1.1 使用代码或xml创建SqlSessionFactory

  1. package com.learn.ssm.chapter3.utils;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5.  
  6. import org.apache.ibatis.datasource.pooled.PooledDataSource;
  7. import org.apache.ibatis.io.Resources;
  8. import org.apache.ibatis.mapping.Environment;
  9. import org.apache.ibatis.session.Configuration;
  10. import org.apache.ibatis.session.SqlSession;
  11. import org.apache.ibatis.session.SqlSessionFactory;
  12. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  13. import org.apache.ibatis.transaction.TransactionFactory;
  14. import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
  15.  
  16. import com.learn.ssm.chapter3.mapper.RoleMapper;
  17. import com.learn.ssm.chapter3.mapper.RoleMapper2;
  18. import com.learn.ssm.chapter3.pojo.Role;
  19.  
  20. public class SqlSessionFactoryUtils {
  21.  
  22. private final static Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class;
  23.  
  24. private static SqlSessionFactory sqlSessionFactory = null;
  25.  
  26. private SqlSessionFactoryUtils() {
  27. }
  28.  
  29. public static SqlSessionFactory getSqlSessionFactory() {
  30. synchronized (LOCK) {
  31. if (sqlSessionFactory != null) {
  32. return sqlSessionFactory;
  33. }
  34. String resource = "mybatis-config.xml";
  35. InputStream inputStream;
  36. try {
  37. inputStream = Resources.getResourceAsStream(resource);
  38. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. return null;
  42. }
  43. return sqlSessionFactory;
  44. }
  45. }
  46.  
  47. //代码生成SqlSessionFactory
  48. public static SqlSessionFactory getSqlSessionFactory2() {
  49. synchronized (LOCK) {
  50. //数据库连接池信息
  51. PooledDataSource dataSource = new PooledDataSource();
  52. dataSource.setDriver("com.mysql.jdbc.Driver");
  53. dataSource.setUsername("root");
  54. dataSource.setPassword("admin123");
  55. dataSource.setUrl("jdbc:mysql://localhost:3306/ssm");
  56. dataSource.setDefaultAutoCommit(false);
  57. //采用MyBatis的JDBC事务方式
  58. TransactionFactory transactionFactory = new JdbcTransactionFactory();
  59. Environment environment = new Environment("development", transactionFactory, dataSource);
  60. //创建Configuration对象
  61. Configuration configuration = new Configuration(environment);
  62. //注册一个MyBatis上下文别名
  63. configuration.getTypeAliasRegistry().registerAlias("role", Role.class);
  64. //加入一个映射器
  65. configuration.addMapper(RoleMapper.class);
  66. configuration.addMapper(RoleMapper2.class);
  67. //使用SqlSessionFactoryBuilder构建SqlSessionFactory
  68. sqlSessionFactory =
  69. new SqlSessionFactoryBuilder().build(configuration);
  70. return sqlSessionFactory;
  71. }
  72. }
  73.  
  74. public static SqlSession openSqlSession() {
  75. if (sqlSessionFactory == null) {
  76. getSqlSessionFactory();
  77. }
  78. return sqlSessionFactory.openSession();
  79. }
  80. }

2. 映射器,由一个java接口和XML文件(或注解)构成

首先定义一个POJO

  1. package com.learn.ssm.chapter3.pojo;
  2.  
  3. public class Role {
  4.  
  5. private Long id;
  6. private String roleName;
  7. private String note;
  8.  
  9. /** setter and getter **/
  10. public Long getId() {
  11. return id;
  12. }
  13.  
  14. public void setId(Long id) {
  15. this.id = id;
  16. }
  17.  
  18. public String getRoleName() {
  19. return roleName;
  20. }
  21.  
  22. public void setRoleName(String roleName) {
  23. this.roleName = roleName;
  24. }
  25.  
  26. public String getNote() {
  27. return note;
  28. }
  29.  
  30. public void setNote(String note) {
  31. this.note = note;
  32. }
  33.  
  34. }

2.1, 接口和XML实现映射

映射器接口:

  1. public interface RoleMapper {
  2. public int insertRole(Role role);
  3. public int deleteRole(Long id);
  4. public int updateRole(Role role);
  5. public Role getRole(Long id);
  6. public List<Role> findRoles(String roleName);
  7. }

在XML创建SqlSession中有这样代码

  1. <mapper resource="com/learn/ssm/chapter3/mapper/RoleMapper.xml"/>
    引入XML(RoleMapper.xml)创建映射器(insert/select/update/delete)代表增/查/改/删
  1. id 代表RoleMapper中方法名字
  1. parameterType代表传入参数类型
  1. resultType代表返回值 "role"是别名,代表<typeAlias alias="role" type="com.learn.ssm.chapter3.pojo.Role"/>
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.learn.ssm.chapter3.mapper.RoleMapper">
  5.  
  6. <insert id="insertRole" parameterType="role">
  7. insert into t_role(role_name, note) values(#{roleName}, #{note})
  8. </insert>
  9.  
  10. <delete id="deleteRole" parameterType="long">
  11. delete from t_role where id= #{id}
  12. </delete>
  13.  
  14. <update id="updateRole" parameterType="role">
  15. update t_role set role_name = #{roleName}, note = #{note} where id= #{id}
  16. </update>
  17.  
  18. <select id="getRole" parameterType="long" resultType="role">
  19. select id,
  20. role_name as roleName, note from t_role where id = #{id}
  21. </select>
  22.  
  23. <select id="findRoles" parameterType="string" resultType="role">
  24. select id, role_name as roleName, note from t_role
  25. where role_name like concat('%', #{roleName}, '%')
  26. </select>
  27. </mapper>

2.2注解实现映射器

XML中引入Mapper:

  1. <mapper class="com.learn.ssm.chapter3.mapper.RoleMapper2"/>
  1. public interface RoleMapper2 {
  2.  
  3. @Select("select id, role_name as roleName, note from t_role where id=#{id}")
  4. public Role getRole(Long id);
  5.  
  6. @Insert("insert into t_role(role_name,note) values(#{roleName},#{note})")
  7. public void insertRole(Role role);
  8. }

注解不易于维护

3. 测试:

  1. public class Chapter3Main {
  2.  
  3. public static void main(String[] args) {
  4. testRoleMapper();
  5. testRoleMapper2();
  6. }
  7.  
  8. //xml 测试
  9. private static void testRoleMapper() {
  10. Logger log = Logger.getLogger(Chapter3Main.class);
  11. SqlSession sqlSession = null;
  12. try {
  13. sqlSession = SqlSessionFactoryUtils.openSqlSession();
  14. RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
  15. Role role = roleMapper.getRole(1L);
  16. Role r1 = new Role();
  17. r1.setRoleName("testRole name");
  18. r1.setNote("note...");
  19. roleMapper.insertRole(r1);
  20. sqlSession.commit();
  21. log.info(role.getRoleName());
  22. }
  23. catch(Exception ex)
  24. {
  25. sqlSession.rollback();
  26. }
  27. finally {
  28. if (sqlSession != null) {
  29. sqlSession.close();
  30. }
  31. }
  32. }
  33.  
  34. //注解SQL测试
  35. private static void testRoleMapper2() {
  36. Logger log = Logger.getLogger(Chapter3Main.class);
  37. SqlSession sqlSession = null;
  38. try {
  39. sqlSession = SqlSessionFactoryUtils.openSqlSession();
  40. RoleMapper2 roleMapper2 = sqlSession.getMapper(RoleMapper2.class);
  41. Role role = roleMapper2.getRole(1L);
  42. Role r1 = new Role();
  43. r1.setRoleName("testRole name map2");
  44. r1.setNote("note...");
  45. roleMapper2.insertRole(r1);
  46. sqlSession.commit();
  47. log.info(role.getRoleName());
  48. }
  49. catch(Exception ex)
  50. {
  51. sqlSession.rollback();
  52. }
  53. finally {
  54. if (sqlSession != null) {
  55. sqlSession.close();
  56. }
  57. }
  58. }
  59. }

  

Mybatis简单应用的更多相关文章

  1. MyBatis简单的增删改查以及简单的分页查询实现

    MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...

  2. spring+springMVC+mybatis简单整合

    spring+springMVC+mybatis简单整合, springMVC框架是spring的子项目,所以框架的整合方式为,spring+Mybatis或springMVC+mybatis. 三大 ...

  3. MyBatis简单使用方式总结

    MyBatis简单使用方式总结 三个部分来理解: 1.对MyBatis的配置部分 2.实体类与映射文件部分 3.使用部分 对MyBatis的配置部分: 1.配置用log4J显式日志 2.导入包的别名 ...

  4. Spring Boot Mybatis简单使用

    Spring Boot Mybatis简单使用 步骤说明 build.gradle:依赖添加 application.properties:配置添加 代码编写 测试 build.gradle:依赖添加 ...

  5. 浅析MyBatis(二):手写一个自己的MyBatis简单框架

    在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...

  6. mybatis 简单使用示例(单独使用):

    mybatis的单独使用简单示例: 步骤1: 新建xml文件. 示例: <?xml version="1.0" encoding="UTF-8" ?> ...

  7. mybatis 简单配置

    一.com/book/map包下有两个配置文件: 1.MyBatisConfig.xml <?xml version="1.0" encoding="UTF-8&q ...

  8. mybatis简单应用(基于配置文件)

    本文主要介绍了如何使用mybatis进行简单的数据库操作.本人使用的是mybatis3.05. 1.创建数据库表(User表) CREATETABLE `NewTable` (`userId` big ...

  9. MYBATIS 简单整理与回顾

    这两天简单整理了一下MyBatis 相关api和jar包这里提供一个下载地址,免得找了 链接:http://pan.baidu.com/s/1jIl1KaE 密码:d2yl A.简单搭建跑项目 2.进 ...

  10. MyBatis简单使用

    MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使 ...

随机推荐

  1. mybatis-6-动态sql

    动态sql简介&OGNL了解 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处 理器相似. MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作. if cho ...

  2. Nacos 2.0源码分析-拦截器机制

    温馨提示: 本文内容基于个人学习Nacos 2.0.1版本代码总结而来,因个人理解差异,不保证完全正确.如有理解错误之处欢迎各位拍砖指正,相互学习:转载请注明出处. Nacos服务端在处理健康检查和心 ...

  3. php使用curl模拟post请求

    废话不多说,直接上代码,做个笔记. $url="http://localhost/header_server.php"; $body = array("mobile&qu ...

  4. yaml 文件解析

    前言 yaml文件其实也是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据,不会改变原有数据类型,所有的数据类型在读取时都会原样输出,yam ...

  5. 自动化测试(1)selenium+python+chrome 连接测试

    环境准备: python版本:3.8.4 开发工具:pycharm 使用chrome和对应的webdriver http://npm.taobao.org/mirrors/chromedriver/ ...

  6. MySQL隔离级别的实现

    虽然平时已经很少使用MySQL了,但是数据库作为基本技能仍然不能忘,最近在学习数据库隔离级别,在此写下个人理解以备复习. 大家都知道数据库事务ACID(原子性.一致性.隔离性和持久性)的四个特征,也知 ...

  7. Java方法02——定义与调用

    方法的定义与调用 定义与调用 例子  package method; ​ public class Demon03 {     public static void main(String[] arg ...

  8. 说实话,Android开发月薪3W,谁不酸呢?

    近期有个网友在某匿名区晒字节跳动Offfer,毕业一年月薪3W,引发众多读者羡慕,纷纷留言酸了.酸了.但进大厂的要求还是蛮高的,需要在技术实力上有一定的积累,今天给大家分享一份高质量笔记, 助力大家技 ...

  9. rancher2.2.2搭建pipeline

    1.通过docker容器安装gitlab代码库 docker run --detach \--hostname 192.168.102.62 \ --env GITLAB_OMNIBUS_CONFIG ...

  10. Python语言系列-08-面向对象3

    反射 #!/usr/bin/env python3 # author: Alnk(李成果) # 反射 # hasattr getattr setattr delattr class Animal(ob ...