美文网首页
Mybatis 初识

Mybatis 初识

作者: 宋雨轩同学 | 来源:发表于2018-04-30 15:44 被阅读39次

1: ORM概念

     ORM(OBJECT-RELATIONSHIP MAPPING) 即对象关系映射,他只是一种思想,他的实质是将数据库中的数据用对象的形式表现出来。
     JPA(JAVA PERSISITENCE API)它是javaee关于orm思想的标准接口,仅仅是一套规范和接口,不是实现
     hibernate就是实现JPA规范和接口的ORM组件(基于对象开发)
     Mybatis是一个半ORM组件(基于sql开发)

2:Mybatis是什么

     Mybatis是一个实现了java数据持久化的开源框架,简单的来说,他就是一个jdbc的封装组件
     Mybatis的前身是ibatis,ibatis创建于2002年,最初是apache下面的一个开源项目
2010迁移到gogole code ,并且更名为Mybatis
     当前最新版本是 3.4.x
     本次主讲版本3.3.1
     官网地址 :https://github.com/mybatis/mybatis-3/releases

3:mybatis有什么优势

消除了大量的jdbc冗余代码(不用手动开关连接,创建statement,结果映射)
* 简单易学,容易上手(基于sql的编程思想,提供了简单易用的api与数据库进行交互)
* 很好的与各种数据库兼容(开发人员不需要考虑数据库的差异性)
* 提供了第三方插件很好的支持(分页插件/逆向工程/缓存组件)
* 提供与spring很好的集成支持

4:Mybatis开发环境搭建

  • 新建java项目,注意项目编码
    • 引入jar包 mybatis3.3.1.jar包
    • 引入mybatis依赖的jar包
      asm-3.3.jar
      cglib-2.2.jar
      commons-logging-1.1.1.jar
      javassist-3.15.0-GA.jar
      log4j-1.2.17.jar
    • 引入junit的包
      hamcrest-core-1.3.jar
      junit-4.11.jar
    • 引入数据库的驱动包
      mysql-connector-java-5.0.8-bin.jar
      ojdbc14.jar
    • 引入jar包到项目中

5: Mybatis的第一个Demo实战

新建一个表 以及对应的实体类 entity包下面的User.java

    CREATE TABLE `m_user` (
      `USER_ID` int(32) NOT NULL AUTO_INCREMENT COMMENT '编号',
      `USER_NAME` varchar(32) NOT NULL,
      `LOGIN_NAME` varchar(100) NOT NULL COMMENT '登录名',
      `PASSWORD` varchar(32) DEFAULT NULL,
      `DEPT_ID` int(32) DEFAULT NULL,
      `BIRTHDAY` datetime DEFAULT NULL COMMENT '创建时间',
      `TV_UPDATE` datetime DEFAULT NULL COMMENT '最后登陆时间',
      PRIMARY KEY (`USER_ID`)       
    ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='用户表';

*引入mybatis的主配置文件
*详见 mybatis-config.xml
*引入对象映射文件 (我们在这个配置文件里面编写增删改查语句)
*编写增删改查 详见userMapper.xml
*测试
*详见MybatisFirstDemoTest.java

6:在正式的开发环境中用Mybatis进行开发有两种方式

*原始的接口和实现类的方式
*缺点:重复代码太多,sqlSession的操作
*statement的id硬编码将来影响维护
*基于mapper代理的开发方式(重点)

import java.sql.Timestamp;

/**
 * 跟数据库表M_USER表对应的实体类
 * @author Administrator
 *
 */
public class User implements java.io.Serializable {
    
    private static final long serialVersionUID = 7195902105451305867L;
    
    private Long userId;
    private String userName;
    private String loginName;
    private String password;
    private Long deptId;
    private Timestamp birthday;
    private Timestamp tvUpdate;
    
    
    public Long getUserId() {
        return userId;
    }
    public void setUserId(Long userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getLoginName() {
        return loginName;
    }
    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Long getDeptId() {
        return deptId;
    }
    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }
    public Timestamp getBirthday() {
        return birthday;
    }
    public void setBirthday(Timestamp birthday) {
        this.birthday = birthday;
    }
    public Timestamp getTvUpdate() {
        return tvUpdate;
    }
    public void setTvUpdate(Timestamp tvUpdate) {
        this.tvUpdate = tvUpdate;
    }
    
    
    @Override
    public String toString() {
        return "User [userId=" + userId + ", userName=" + userName + ", loginName=" + loginName + ", password="
                + password + ", deptId=" + deptId + ", birthday=" + birthday + ", tvUpdate=" + tvUpdate + "]";
    }
<?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>

    <!--默认引用哪个数据库环境  -->
    <environments default="defaultEnv">
        <environment id="defaultEnv">
            <!--事务管理方式  -->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据库连接四要素   -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>  
    </environments>

    <!-- 加入所有的sql映射文件 -->
    <mappers>
        <mapper resource="userMapper.xml"/>
    </mappers>


</configuration>
import java.util.List;

import com.tz.mybatis.sysmanage.entity.User;

/**
 * 定义用户增删改查dao接口
 * @author Administrator
 *
 */
public interface IUserDao {
    
    /**
     * 根据用户id获取用户对象信息
     * @param userId
     * @return
     */
    public User getUserById(Long userId);
    
    
    /**
     * 查询所有用户对象
     * @return
     */
    public List<User> getUserList();
    
    /**
     * 增加用户对象
     * @param user
     */
    public void addUser(User user);
    
    
    /**
     * 删除用户对象
     * @param user
     */
    public void delUser(User user);
    
    
    /**
     * 修改用户对象
     * @param user
     */
    public void updateUser(User user);
    
    
        
}
<?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 = "user"> 
    
    <!--
        1: id:表示一个sql句柄(相当于在jdbc的statement对象)
        2: paremeterType :输入参数的类型 ,在sql语句中,通过占位符#{}来接收此参数
        3:resultType: sql操作返回的结果类型
      -->
        
    <select id = "getUserById" parameterType = "java.lang.Long"
        resultType = "com.tz.mybatis.sysmanage.entity.User" >
    SELECT USER_ID USERID,USER_NAME USERNAME,LOGIN_NAME LOGINNAME,
        BIRTHDAY,TV_UPDATE TVUPDATE
    FROM M_USER WHERE USER_ID = #{ID}
    </select>
    
    <!--查询所有用户信息  -->  
    <select id = "getUserList" resultType="com.tz.mybatis.sysmanage.entity.User">
        SELECT USER_ID USERID,USER_NAME USERNAME,LOGIN_NAME LOGINNAME,
        BIRTHDAY,TV_UPDATE TVUPDATE FROM M_USER
    </select>

    <!--增加用户记录 -->
    <insert id = "addUser" parameterType= "com.tz.mybatis.sysmanage.entity.User">
        INSERT INTO M_USER(USER_NAME,LOGIN_NAME,BIRTHDAY,TV_UPDATE)
        VALUES(#{userName},#{loginName},#{birthday},#{tvUpdate})
    </insert>

    <!--删除用户  --> 
    <delete id = "delUser" parameterType = "java.lang.Long">
        DELETE FROM M_USER WHERE USER_ID =  #{ID}
    </delete>

    <!--修改用户  -->
    <update id = "updateUser" parameterType= "com.tz.mybatis.sysmanage.entity.User">
        UPDATE M_USER SET 
        USER_NAME = #{userName},
        LOGIN_NAME = #{loginName},
        BIRTHDAY = #{birthday}
        WHERE USER_ID = #{userId}
    </update>
</mapper>
import java.sql.Timestamp;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.tz.mybatis.sysmanage.dao.IUserDao;
import com.tz.mybatis.sysmanage.entity.User;

public class UserDaoImpl implements IUserDao{

    private SqlSessionFactory sqlSessionFactory;
    
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
        this.sqlSessionFactory = sqlSessionFactory;
    }
    
    @Override
    public User getUserById(Long userId) {
        SqlSession sqlSession = sqlSessionFactory.openSession();        
        User user = sqlSession.selectOne("user.getUserById", 1l);       
        sqlSession.close();
        return user;
    }

    @Override
    public List<User> getUserList() {
        SqlSession sqlSession = sqlSessionFactory.openSession();        
        List<User> userList= sqlSession.selectList("user.getUserList");     
        sqlSession.close();
        return userList;
    }

    @Override
    public void addUser(User user) {
        SqlSession sqlSession = sqlSessionFactory.openSession();        
        int rows = sqlSession.insert("user.addUser", user); 
        System.out.println("受影响的行:"+rows);
        sqlSession.commit();
        sqlSession.close();     
        
    }

    @Override
    public void delUser(User user) {
        SqlSession sqlSession = sqlSessionFactory.openSession();        
        int rows = sqlSession.delete("user.delUser", user.getUserId()); 
        System.out.println("受影响的行:"+rows);
        sqlSession.commit();
        sqlSession.close(); 
        
    }

    @Override
    public void updateUser(User user) { 
        SqlSession sqlSession = sqlSessionFactory.openSession();        
        int rows = sqlSession.update("user.updateUser", user);  
        System.out.println("受影响的行:"+rows);
        sqlSession.commit();
        sqlSession.close(); 
    }

}

相关文章

  • Mybatis入门

    目的:入门,熟悉mybatis是什么,怎么用。 1. 初识Mybatis 1.1 Mybatis介绍 MyBati...

  • 初识MyBatis

    MyBatis学习笔记(二) Mapper XML文件配置 SQL映射文件几个的元素 ☆ Select查询语句 1...

  • Mybatis 初识

    1: ORM概念 ORM(OBJECT-RELATIONSHIP MAPPING) 即对象关系映射,他只是一种...

  • 初识MyBatis

    MyBatis学习笔记(一) 1、什么是MyBatis2、安装3、第一个mybatis实例 前言 1、ORM:Ob...

  • 初识MyBatis

    本文目标 掌握MyBatis基础组件及其使用、MyBatis的使用方法 掌握基础组件的生命周期及其实现方法 掌握入...

  • 初识Mybatis

    MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码...

  • 初识Mybatis

    Mybatis是一个持久层的框架 Mybatis让程序员把主要精力放在sql上,通过mybatis的映射方式,自由...

  • 初识MyBatis

    引言 Java互联网应用可以通过mybatis框架访问数据库,使用MyBatis框架主要有一下三个优点: 不屏蔽S...

  • 初识 Mybatis

    Mybatis本是aapache的一个开源项目ibatis 。Mybatis是一个优秀的持久层框架,它对jdbc的...

  • Mybatis 初识

    Mybatis组件 SqlSessionFactoryBuilder: 工厂构造器 SqlSessionFacto...

网友评论

      本文标题:Mybatis 初识

      本文链接:https://www.haomeiwen.com/subject/minzlftx.html