初识MyBatis

MyBatis框架介绍

MyBatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询,存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索,MyBatis作为持久层框架,其主要思想是将程序中的大量的SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改

MyBatis的前身是iBatis,本是Apache的一个开源项目,2010年这个项目由Apache Software Foundation迁移到了Google Code,并改名为MyBatis。2013年迁移到Github

MyBatis官网:http://mybatis.org

Github:http://github.com/mybatis

什么是ORM

ORM(Object/Relational Mapping)即对象/关系映射,是一种数据持久化技术。它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过javaBean对象去操作数据库表中的数据

MyBatis是ORM解决方案

基于ORM,MyBatis在对象模型和关系数据库的表之间建立了一座桥梁,通过MyBatis建立SQL关系映射,以便捷地实现数据存储,查询,更改,和删除等操作

下面是入门代码

 

下面是jar包

主配置文件

<?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>
<!-- 和spring整合后 environments将废除 -->
    <environments default="development">
        <environment id="development">
        <!-- 使用JDBC事务管理,事务控制由mybatis -->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接池,由mybatis -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="sqlmap/UserMapper.xml"/>
    </mappers>
    
</configuration>

mapper.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">
  <!-- namespace命名空间 作用是对sql进行分类化管理 理解sql隔离 -->
  <mapper namespace="test">
      
      <!-- 在映射文件中可以配置很多sql语句 通过select进行用户查询
           这里面的id进行称为statement的id
          #{}表示一个占位符
          parameterType:指定输入参数的类型
          #{id}:这里面的id表示接收一个名字为id的参数  如果输入参数的类型为简单类型那么这里的名字可以任意
          resultType:将数据查出来然后映射到相应的类中
       -->
      
      <select id="findUserByID" parameterType="int" resultType="com.bdqn.cn.user.User">
          select * from User where id=#{id}
      </select>
      
      <!-- parameterType="java.lang.String":这里的参数可以是String 不一定非要写成全部形式 -->
      <select id="findUserByName" parameterType="java.lang.String" resultType="com.bdqn.cn.user.User">
      
          <!-- '%${value}%' == #{value} 但是测试代码那边参数要写成 "%赵%" 使用${}进行拼接容易引起sql注入
                %${value}%表示接收传入的参数 这里面只能使用value
           -->
          select * from user where username like '%${value}%';
          
      </select>
      
      <insert id="insertUser" parameterType="com.bdqn.cn.user.User" >
          
          <!-- keyProperty:将查询到的主键设置到parameterType指定的对象的哪个属性 
               order: select last_insert()_id 执行顺序 相对于insert语句来说他的执行顺序
          -->
          
          <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
              
              SELECT LAST_INSERT_ID()
              
          </selectKey>
          
          insert into User(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
          
      </insert>
      
      
      <delete id="deleteUser" parameterType="java.lang.Integer">
          
          delete from user where id=#{id}
          
      </delete>
  
      <update id="updateUser" parameterType="com.bdqn.cn.user.User">
      
          update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address} where id=#{id}
      
      </update>
  
  
  </mapper>

实体类

 

public class User {
    
    private int id;
    private String username;
    private String sex;
    private Date birthday;
    private String address;
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    public User(int id, String username, String sex, Date birthday,
            String address) {
        super();
        this.id = id;
        this.username = username;
        this.sex = sex;
        this.birthday = birthday;
        this.address = address;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", sex=" + sex
                + ", birthday=" + birthday + ", address=" + address + "]";
    }
    
    
    
    
    
    
}
测试类:

public class MybatisFirst {
    

    //根据用户查询 最后得到一条记录 
    @Test
    public void findUserByIDTest(){
        
        try {
            //sqlmap配置文件
            String resource = "SqlMapConfig.xml";

            InputStream config = Resources.getResourceAsStream(resource);

            //创建会话工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(config);
            //通过工厂得到SqlSession
            SqlSession openSession = sqlSessionFactory.openSession();
            System.out.println(1);
            //通过SqlSession操作数据库   第一个参数 映射文件中statement的id 第二个参数   指定和映射文件中所匹配的parameterType类型的参数
            User u = openSession.selectOne("test.findUserByID", 1);
            System.out.println(u);
            //释放资源
            openSession.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
    @Test
    public void Method2(){
        
        try {
            //sqlmap配置文件
            String resource = "SqlMapConfig.xml";

            InputStream config = Resources.getResourceAsStream(resource);

            //创建会话工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(config);
            //通过工厂得到SqlSession
            SqlSession openSession = sqlSessionFactory.openSession();
            //通过SqlSession操作数据库   第一个参数 映射文件中statement的id 第二个参数   指定和映射文件中所匹配的parameterType类型的参数
            //selectOne()表示要查询的是一条数据   
//            User u = openSession.selectOne("test.findUserByID", 1);
//            selectList()表示获取很多数据
            List<User> selectList = openSession.selectList("test.findUserByName", "赵");
            
            System.out.println(selectList);
            //释放资源
            openSession.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
    @Test
    public void insertMethod(){
        
        try {
            //sqlmap配置文件
            String resource = "SqlMapConfig.xml";

            InputStream config = Resources.getResourceAsStream(resource);

            //创建会话工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(config);
            //通过工厂得到SqlSession
            SqlSession openSession = sqlSessionFactory.openSession();
            User user = new User();
            user.setUsername("马超");
            user.setSex("男");
            user.setBirthday(new Date());
            user.setAddress("北京");
            openSession.insert("test.insertUser",user);
            
            //提交事务
            openSession.commit();
            
            //获取用户主键ID
            System.out.println("返回的主键为:"+user.getId());
            //释放资源
            openSession.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
    @Test
    public void deleteUser(){
        
        try {
            //sqlmap配置文件
            String resource = "SqlMapConfig.xml";

            InputStream config = Resources.getResourceAsStream(resource);

            //创建会话工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(config);
            //通过工厂得到SqlSession
            SqlSession openSession = sqlSessionFactory.openSession();
            //通过SqlSession操作数据库   第一个参数 映射文件中statement的id 第二个参数   指定和映射文件中所匹配的parameterType类型的参数
            //selectOne()表示要查询的是一条数据   
//            User u = openSession.selectOne("test.findUserByID", 1);
//            selectList()表示获取很多数据
            
            openSession.delete("test.deleteUser",4);
            
            //提交事务
            openSession.commit();
            
            //释放资源
            openSession.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
        
    }
    
    
    @Test
    public void updateUser(){
        
        try {
            //sqlmap配置文件
            String resource = "SqlMapConfig.xml";

            InputStream config = Resources.getResourceAsStream(resource);

            //创建会话工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(config);
            //通过工厂得到SqlSession
            SqlSession openSession = sqlSessionFactory.openSession();
            //通过SqlSession操作数据库   第一个参数 映射文件中statement的id 第二个参数   指定和映射文件中所匹配的parameterType类型的参数
            //selectOne()表示要查询的是一条数据   
//            User u = openSession.selectOne("test.findUserByID", 1);
//            selectList()表示获取很多数据
            
            User user = new User();
            user.setId(2);
            user.setUsername("张飞");
            user.setSex("男");
            user.setBirthday(new Date());
            user.setAddress("南京");
            
            openSession.update("test.updateUser",user);
            
            //提交事务
            openSession.commit();
            
            //释放资源
            openSession.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
        
    }
    
}
 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值