Mybatis简单应用
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简单的增删改查以及简单的分页查询实现
MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...
- spring+springMVC+mybatis简单整合
spring+springMVC+mybatis简单整合, springMVC框架是spring的子项目,所以框架的整合方式为,spring+Mybatis或springMVC+mybatis. 三大 ...
- MyBatis简单使用方式总结
MyBatis简单使用方式总结 三个部分来理解: 1.对MyBatis的配置部分 2.实体类与映射文件部分 3.使用部分 对MyBatis的配置部分: 1.配置用log4J显式日志 2.导入包的别名 ...
- Spring Boot Mybatis简单使用
Spring Boot Mybatis简单使用 步骤说明 build.gradle:依赖添加 application.properties:配置添加 代码编写 测试 build.gradle:依赖添加 ...
- 浅析MyBatis(二):手写一个自己的MyBatis简单框架
在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...
- mybatis 简单使用示例(单独使用):
mybatis的单独使用简单示例: 步骤1: 新建xml文件. 示例: <?xml version="1.0" encoding="UTF-8" ?> ...
- mybatis 简单配置
一.com/book/map包下有两个配置文件: 1.MyBatisConfig.xml <?xml version="1.0" encoding="UTF-8&q ...
- mybatis简单应用(基于配置文件)
本文主要介绍了如何使用mybatis进行简单的数据库操作.本人使用的是mybatis3.05. 1.创建数据库表(User表) CREATETABLE `NewTable` (`userId` big ...
- MYBATIS 简单整理与回顾
这两天简单整理了一下MyBatis 相关api和jar包这里提供一个下载地址,免得找了 链接:http://pan.baidu.com/s/1jIl1KaE 密码:d2yl A.简单搭建跑项目 2.进 ...
- MyBatis简单使用
MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使 ...
随机推荐
- mybatis-6-动态sql
动态sql简介&OGNL了解 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处 理器相似. MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作. if cho ...
- Nacos 2.0源码分析-拦截器机制
温馨提示: 本文内容基于个人学习Nacos 2.0.1版本代码总结而来,因个人理解差异,不保证完全正确.如有理解错误之处欢迎各位拍砖指正,相互学习:转载请注明出处. Nacos服务端在处理健康检查和心 ...
- php使用curl模拟post请求
废话不多说,直接上代码,做个笔记. $url="http://localhost/header_server.php"; $body = array("mobile&qu ...
- yaml 文件解析
前言 yaml文件其实也是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据,不会改变原有数据类型,所有的数据类型在读取时都会原样输出,yam ...
- 自动化测试(1)selenium+python+chrome 连接测试
环境准备: python版本:3.8.4 开发工具:pycharm 使用chrome和对应的webdriver http://npm.taobao.org/mirrors/chromedriver/ ...
- MySQL隔离级别的实现
虽然平时已经很少使用MySQL了,但是数据库作为基本技能仍然不能忘,最近在学习数据库隔离级别,在此写下个人理解以备复习. 大家都知道数据库事务ACID(原子性.一致性.隔离性和持久性)的四个特征,也知 ...
- Java方法02——定义与调用
方法的定义与调用 定义与调用 例子 package method; public class Demon03 { public static void main(String[] arg ...
- 说实话,Android开发月薪3W,谁不酸呢?
近期有个网友在某匿名区晒字节跳动Offfer,毕业一年月薪3W,引发众多读者羡慕,纷纷留言酸了.酸了.但进大厂的要求还是蛮高的,需要在技术实力上有一定的积累,今天给大家分享一份高质量笔记, 助力大家技 ...
- rancher2.2.2搭建pipeline
1.通过docker容器安装gitlab代码库 docker run --detach \--hostname 192.168.102.62 \ --env GITLAB_OMNIBUS_CONFIG ...
- Python语言系列-08-面向对象3
反射 #!/usr/bin/env python3 # author: Alnk(李成果) # 反射 # hasattr getattr setattr delattr class Animal(ob ...