美文网首页
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 初识

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