1、认识Mybatis

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.

1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。(我主要学习java,就讲java的使用)
  2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
  3)mybatis与hibernate的对比?

mybatis提供一种“半自动化”的ORM实现。
   这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。

而mybatis的着力点,则在于POJO与SQL之间的映射关系。

2、基于配置文件的CRUD    使用的mybatis的版本是3.1.1

User.java

public class User {

private Integer id;
    
    private String username;
    
    private String password;

public Integer getId() {
        return id;
    }

public void setId(Integer id) {
        this.id = id;
    }

public String getUsername() {
        return username;
    }

public void setUsername(String username) {
        this.username = username;
    }

public String getPassword() {
        return password;
    }

public void setPassword(String password) {
        this.password = password;
    }

public User() {
        super();
        // TODO Auto-generated constructor stub
    }

public User(Integer id, String username, String password) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
    }
    
    public User(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }  
}

User.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.sram.pojo.User">
    <!-- 插入语句 -->
    <insert id="add" parameterType="com.sram.pojo.User">
        INSERT INTO t_user(USERNAME,PASSWORD) VALUES(#{username},#{password});
    </insert>
    <!-- 更新语句 -->
    <update id="update" parameterType="com.sram.pojo.User">
        UPDATE t_user SET USERNAME=#{username},PASSWORD=#{password} WHERE ID=#{id};
    </update>
    <!-- 删除语句 -->
    <delete id="delete" parameterType="int">
        DELETE FROM t_user WHERE ID=#{id};
    </delete>
    <!-- 查询集合 -->
    <select id="list" resultType="com.sram.pojo.User">
        SELECT ID,USERNAME,PASSWORD FROM t_user;
    </select>
    <!-- 查询单个 -->
    <select id="load" resultType="com.sram.pojo.User" parameterType="int">
        SELECT ID,USERNAME,PASSWORD FROM t_user where ID=#{id};
    </select>
</mapper>

Mybatis获取session的工具类MybatisUtil

public class MyBatiesUtil {

private static SqlSessionFactory factory;
    
    //加载一次配置文件
    static{
        try {
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    
    //得到sqlSession
    public static SqlSession getSqlSession(){
        return factory.openSession();
    }
}

数据库的配置文件jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url = jdbc\:mysql\://localhost\:3306/mybatis?useUnicode\=true&characterEncoding\=utf-8
jdbc.username = root
jdbc.password = rrb

日志配置文件log4j.properties

#--------------------------------   
#  
log4j.rootLogger=INFO, stdout  
#log4j.logger.test=info  
#log4j.logger.org.apache.jasper = DEBUG  
#log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG  
#log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG  
 
#log4j.logger.com.fiscal = DEBUG  
#log4j.logger.com.system = DEBUG  
 
log4j.logger.com.ibatis = DEBUG  
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG  
log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG  
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG  
log4j.logger.java.sql.Connection = DEBUG  
log4j.logger.java.sql.Statement = DEBUG  
log4j.logger.java.sql.PreparedStatement = DEBUG
log4j.logger.java.sql.ResultSet = INFO  
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
 
#log4j.appender.fileout=org.apache.log4j.RollingFileAppender  
#log4j.appender.fileout.File=e:/log/ibatis.log   
#log4j.appender.fileout.MaxFileSize=10000KB

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout   
#log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} :%m%n   
#log4j.appender.fileout.layout=org.apache.log4j.PatternLayout   
#log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH:mm:ss} :%m%n  
 
#log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout   
 
# log4j.logger.org=info

Mybatis配置文件mybatis-config.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="jdbc.properties"></properties>
    <environments default="development">
        <environment id="development" >
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 将mapper文件加入到配置文件中 -->
    <mappers>
        <mapper resource="com/sram/pojo/User.xml"/>
    </mappers>
</configuration>

测试CRUD的测试类

public class UserTest {

//测试配置添加方法
    @Test
    public void add(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        
        try {
            User user = new User("张三","123");
            
            session.insert(User.class.getName()+".add",user);
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
    //测试配置更新方法
    @Test
    public void update(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        
        try {
            User user = new User(9,"李四","567");
            
            session.update(User.class.getName()+".update",user);
            
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
    //测试配置删除方法
    @Test
    public void delete(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        
        try {
            
            session.delete(User.class.getName()+".delete",10);
            
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
    //测试配置查询集合方法
    @Test
    public void list(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        List<User> list = null;
        try {
            
            list = session.selectList(User.class.getName()+".list");
            
            System.out.println(list);
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
    //测试配置查询单个方法
    @Test
    public void load(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        try {
            
            User user = session.selectOne(User.class.getName()+".load",9);
            
            System.out.println(user.getUsername());
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
}

3、基于注解的CRUD 使用的mybatis的版本是3.1.1

User.java

public class User {

private Integer id;
    
    private String username;
    
    private String password;

public Integer getId() {
        return id;
    }

public void setId(Integer id) {
        this.id = id;
    }

public String getUsername() {
        return username;
    }

public void setUsername(String username) {
        this.username = username;
    }

public String getPassword() {
        return password;
    }

public void setPassword(String password) {
        this.password = password;
    }

public User() {
        super();
        // TODO Auto-generated constructor stub
    }

public User(Integer id, String username, String password) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
    }
    
    public User(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }
}

UserMapper.java

public interface UserMapper {

@Insert("INSERT INTO t_user(USERNAME,PASSWORD) VALUES(#{username},#{password})")
    public void addUser(User user);
    
    @Update("UPDATE t_user SET USERNAME=#{username},PASSWORD=#{password} WHERE ID=#{id}")
    public void update(User user);
    
    @Delete("DELETE FROM t_user WHERE ID=#{id}")
    public void delete(int id);
    
    @Select("SELECT ID,USERNAME,PASSWORD FROM t_user")
    public List<User> list();
    
    @Select("SELECT ID,USERNAME,PASSWORD FROM t_user where ID=#{id}")
    public User load(int id);
}

mybatis获取session的工具类 MybatisUtils.java

public class MyBatisUtil {

private static SqlSessionFactory factory;
    
    //加载一次配置文件
    static{
        try {
            InputStream in = Resources.getResourceAsStream("mybaties-config.xml");
            factory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    
    //得到sqlSession
    public static SqlSession getSqlSession(){
        return factory.openSession();
    }

数据库的配置文件jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url = jdbc\:mysql\://localhost\:3306/mybatis?useUnicode\=true&characterEncoding\=utf-8
jdbc.username = root
jdbc.password = rrb

日志配置文件log4j.properties

#--------------------------------   
#  
log4j.rootLogger=INFO, stdout  
#log4j.logger.test=info  
#log4j.logger.org.apache.jasper = DEBUG  
#log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG  
#log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG  
 
#log4j.logger.com.fiscal = DEBUG  
#log4j.logger.com.system = DEBUG  
 
log4j.logger.com.ibatis = DEBUG  
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG  
log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG  
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG  
log4j.logger.java.sql.Connection = DEBUG  
log4j.logger.java.sql.Statement = DEBUG  
log4j.logger.java.sql.PreparedStatement = DEBUG
log4j.logger.java.sql.ResultSet = INFO  
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
 
#log4j.appender.fileout=org.apache.log4j.RollingFileAppender  
#log4j.appender.fileout.File=e:/log/ibatis.log   
#log4j.appender.fileout.MaxFileSize=10000KB

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout   
#log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} :%m%n   
#log4j.appender.fileout.layout=org.apache.log4j.PatternLayout   
#log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH:mm:ss} :%m%n  
 
#log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout   
 
# log4j.logger.org=info

mybatis配置文件mybatis-confg.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="jdbc.properties"></properties>
    <environments default="development">
        <environment id="development" >
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 将mapper文件加入到配置文件中 -->
    <mappers>
        <mapper class="com.sram.mapper.UserMapper"/>
    </mappers>
</configuration>

测试类

public class UserTest {

//测试注解添加方法
    @Test
    public void add(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        
        try {
            User user = new User("张三","123");
            
            session.getMapper(UserMapper.class).addUser(user);
            
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
    //测试注解更新方法
    @Test
    public void update(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        
        try {
            User user = new User(13,"李四","567");
            
            session.getMapper(UserMapper.class).update(user);
            
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
    //测试注解删除方法
    @Test
    public void delete(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        
        try {
            
            session.getMapper(UserMapper.class).delete(14);
            
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
    //测试注解查询集合方法
    @Test
    public void list(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        List<User> list = null;
        try {
            
            list = session.getMapper(UserMapper.class).list();
            
            System.out.println(list);
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
    //测试注解查询单个方法
    @Test
    public void load(){
        
        //得到sqlSession
        SqlSession session = MyBatiesUtil.getSqlSession();
        try {
            
            User user = session.getMapper(UserMapper.class).load(13);
            
            System.out.println(user);
            //事务提交
            session.commit();
            
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
        
    }
}

对Mybatis的初步认识的更多相关文章

  1. java 持久框架mybatis的初步学习

    什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBati ...

  2. Mybatis的初步使用

    MyBatis 是当下最流行的持久层框架,也是ORM框架,本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google ...

  3. Mybatis学习-初步认知与使用

    Mybatis是一款优秀的持久层框架.且支持定制化SQL,存储过程以及高级映射 Mybatis几乎免除了所有的JDBC代码以及设置参数和获取结果集的工作,它使用简单的XML或注解来配置原始类型.接口和 ...

  4. (一)Mybatis之初步接触

    Maven的安装及环境配置 安装及配置只需按照以下三个链接的步骤走 撸帝的博客https://www.funtl.com/zh/maven/Maven-%E5%AE%89%E8%A3%85%E9%85 ...

  5. 初识 tk.mybatis.mapper

    在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...

  6. 初识 tk.mybatis.mapper 通用mapper

    在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...

  7. mybatis源码-解析配置文件(二)之解析的流程

    目录 1. 简介 2. 配置文件解析流程分析 2.1 调用 2.2 解析的目的 2.3 XML 解析流程 2.3.1 build(parser) 2.3.2 new XMLConfigBuilder( ...

  8. mybatis源码-解析配置文件(一)之XML的DOM解析方式

    目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...

  9. SSM初步整合一

    SSM(spring+springmvc+mybatis)初步整合一配置步骤: 步骤一.导入所需jar包 步骤二 .配置web.xml文件 <?xml version="1.0&quo ...

随机推荐

  1. 整理javascript基础

    原始类型值(Primitive values) 下面的全是原始类型值(简称:原始值): 布尔类型:true,false 数字类型:1736,1.351 字符串类型: 'abc',"abc&q ...

  2. Python一篇学会多进程

    阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiprocessing python 中的多 ...

  3. MySQL 5.7.16 在CentOS 6.5 x64 安装

    1.创建MySQL组和MySQL用户   # groupadd mysql   # useradd -g mysql mysql2.创建MySQL软件安装路径/opt/software   # mkd ...

  4. 生产者消费者模式-Java实现

    感知阶段 随着软件业的发展,互联网用户的日渐增多,并发这门艺术的兴起似乎是那么合情合理.每日PV十多亿的淘宝,处理并发的手段可谓是业界一流.用户访问淘宝首页的平均等待时间只有区区几秒,但是服务器所处理 ...

  5. Flink学习笔记:Operators串烧

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  6. NOI.AC省选模拟赛第一场 T1 (树上高斯消元)

    link 很容易对于每个点列出式子 \(f_{x,y}=(f_{x,y-1}+f_{x,y}+f_{x,y+1}+f_{x+1,y})/4\)(边角转移类似,略) 这个转移是相互依赖的就gg了 不过你 ...

  7. MVC软件设计模式

    Model(模型):负责数据维护 View(视图):负责向用户呈现数据 Control(控制):负责模型和视图之间的交互 应用:Struts就是基于MVC模式的架构

  8. ios真机测试问题

    前端页面在ios端真机测试出现的问题 由于苹果对于性能的要求是近乎苛刻,如果没有可点的特性的元素系统默认不会给它响应事件,因此真机测试时容易添加不上绑定事件 解决办法: 1.通过js判断当前是否为苹果 ...

  9. python web开发小结

    书籍 <python基础教程> <流畅的python> web框架 flask django tornado ORM sqlalchemy orator 消息队列 celery ...

  10. centos 7编译安装php7

    0.下载php源代码 http://www.php.net/releases/ 1.配置编译环境 yum install -y gcc gcc++ libxml2-devel openssl open ...