zoukankan      html  css  js  c++  java
  • MyBatis框架

    1.MyBatis

    myBatis是一个开源的数据持久曾框架。它地内部封装了jdbc访问数据库的操作,支持普通的sql查询,存储过程和高级映射,他的主要思想是将程序中的大量sql语句剥离出来,配置在配置文件中,将sql与程序代码分离。

    2.ORM

    ORM(object  relational Mapping)即对象/关系映射,是一种持久化技术。他在对象模型和关系型数据库之间建立对应关系,可以使用API直接操作javaBnean对象就可以实现数据的存储,查询和更改,删除等操作。MyBatis通过简单的xml或者注解进行配置和原始映射,将实体类和sql语句之间建立映射关系,是一种半自动化的ORM实现。

    3.MyBtais环境搭建

    1)创建maven项目: 右键file--〉project

    2)创建Group和ArtifactId

    3)settings和repository一般在C盘,可以不用改,加入 archetypeCatalog = internal  可以防止maven慢

    4)next--〉finish,就可以完成环境的搭建

    4.创建maven项目

    1)加入此设置可以防止创建maven项目慢

    2)同上步骤可以完成项目的创建

    5.创建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">
    <!--通过这个配置文件,完成mybatis与数据库的连接-->
    <configuration>
        <!-- 引入jdbc.properties-->
        <properties resource="jdbc.properties"/>
        <typeAliases>
    
    
            <package name="cn.happy.pojo"></package>
    
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <!--配置事务管理 采用jdbc-->
                <transactionManager type="JDBC"></transactionManager>
                <!--POOLED mybatis的数据原   jndi 基于tomcat的数据原-->
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <!--<property name="password" value="${password}"/>-->
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="cn/happy/dao/UserMapper.xml"/>
            <mapper resource="cn/happy/dao/RoleMapper.xml"/>
        </mappers>
    </configuration>

    注:1)configuration:配置文件的根元素节点

      2)properties:通过resource属性从外部指定properties属性文件(database.properties),该属性文件描述的数据库连接的相关配置,位置也在/resource目录下

      3)enviroment:配置mybatis的一套运行环境,需指定运行环境的id,事务管理,数据源配置等相关信息

      4)mappers:作用是告诉mybatis去哪里找到sql映射文件(该文件内容是开发者定义的映射sql语句),整个项目中可以有一个或多个sql映射文件。

      5)mapper: mappers的子元素节点,具体指定sql映射文件的路径,其中resources属性的值表述了sql映射文件的路径(资源路径)。

    TIP:mybatis-config.xml文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么xml文件就会报错。

    6.创建持久化类(pojo)和sql映射文件

      1) 持久化类是指其实例状态需要被mybatis持久化到数据库中的类 。

      

    
    
    package cn.happy.pojo;

    public class Role {
    private int id;
    private String roleCode;
    private String roleName;

    public int getId() {
    return id;
    }

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

    public String getRoleCode() {
    return roleCode;
    }

    public void setRoleCode(String roleCode) {
    this.roleCode = roleCode;
    }

    public String getRoleName() {
    return roleName;
    }

    public void setRoleName(String roleName) {
    this.roleName = roleName;
    }
    }
     

     pojo就是java对象,符合javaBean规范的实体类,不需要继承和实现任何特殊的接口或java基类。

     2)sql映射文件,完成于pojo的映射,该文件一般命名为类名+Mapper.xml

      注:mapper:映射文件的根元素节点,只有一个属性namespace;

          namespace:用于区分不同的mapper,全局唯一

        select:表示查询的语句,是mybatis最常用的元素之一,常用属性如下:

          id属性:该命名空间下的唯一标识符

          resultType属性:表示sql语句返回值类型。

    <?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="cn.happy.dao.RoleMapper">
    
        <insert id="add"  parameterType="Role">
            INSERT  INTO  role(roleCode,roleName) VALUES (#{roleCode},#{roleName})
        </insert>
    
        <update id="update" parameterType="Role">
            UPDATE  role set roleCode=#{roleCode},roleName=#{roleName} WHERE  id=#{id}
        </update>
    
        <delete id="delete" parameterType="Role">
            DELETE  from  role  WHERE  id=#{id}
        </delete>
    </mapper>

    7.创建测试类 

     在测试类中加入junit,创建测试类进行功能侧试。

    package cn.happy.test;
    
    import cn.happy.dao.RoleMapper;
    import cn.happy.dao.UserMapper;
    import cn.happy.pojo.Address;
    import cn.happy.pojo.Role;
    import cn.happy.pojo.User;
    import cn.happy.util.MyBatisUtil;
    import org.apache.ibatis.session.SqlSession;
    
    import org.apache.log4j.Logger;
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class RoleDaoTest {
        private Logger logger = Logger.getLogger(userDaoTest.class);
        //增加的方法
        @Test
        public  void addTest(){
            SqlSession sqlSession = null;
            Role role = new Role();
            role.setRoleCode("SALE");
            role.setRoleName("销售");
            try {
                sqlSession = MyBatisUtil.createSqlSession();
                sqlSession.getMapper(RoleMapper.class).add(role);
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
                sqlSession.rollback();
            }finally {
                MyBatisUtil.closeSqlSession(sqlSession);
            }
        }
            //修改的方法
        @Test
        public void updateTest() {
            SqlSession sqlSession = null;
            Role role = new Role();
            role.setId(5);
            role.setRoleCode("SALE-1");
            role.setRoleName("销售-1");
            try {
                sqlSession = MyBatisUtil.createSqlSession();
                sqlSession.getMapper(RoleMapper.class).update(role);
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
                sqlSession.rollback();
            } finally {
                MyBatisUtil.closeSqlSession(sqlSession);
            }
        }
    
        //删除的方法
        @Test
        public void deleteTest(){
            Role role = new Role();
            role.setId(5);
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtil.createSqlSession();
                sqlSession.getMapper(RoleMapper.class).delete(role);
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
                sqlSession.rollback();
            }finally {
                MyBatisUtil.closeSqlSession(sqlSession);
            }
        }
    
        //查询的方法
        @Test
        public void  getRoleList(){
            SqlSession sqlSession = null;
            List<Role>  list = new ArrayList<Role>();
            Role role = new Role();
            role.setRoleCode("A");
            role.setRoleName("");
            try {
                sqlSession = MyBatisUtil.createSqlSession();
               list =  sqlSession.getMapper(RoleMapper.class).getRoleList(role);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                MyBatisUtil.closeSqlSession(sqlSession);
            }
            for (Role _role : list){
                logger.debug("roleName---------->"+_role.getRoleName());
            }
        }
    
        /*    //根据roleId获取用户信息
        @Test
        public  void  getUserListByRoleIdTest(){
          SqlSession sqlSession = null;
          Role role = new Role();
          role.setId(1);
          List<User>  userList = new ArrayList<User>();
            try {
                sqlSession = MyBatisUtil.createSqlSession();
                 userList = sqlSession.getMapper(UserMapper.class).getUserListByRoleId(role);
                for (User user : userList) {
                    logger.debug("user--------->"+user.getUserName());
                    logger.debug("user--------->"+user.getRole().getRoleName());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }*/
    
        @Test
        public  void getAddressListByUserIdTest(){
            SqlSession sqlSession = null;
            User user = new User();
            user.setId(1);
            try {
                sqlSession = MyBatisUtil.createSqlSession();
                user = sqlSession.getMapper(UserMapper.class).getAddressListByUserId(user);
                List<Address> addressList = user.getAddressList();
                for(Address address : addressList){
                    logger.debug("address------------>"+address.getAddressContent());
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Test
        public  void serchUserListTest(){
            SqlSession sqlSession = null;
            User user = new User();
            user.setRoleId(1);
            user.setUserCode("");
            user.setUserName("");
            List<User>  userList = new ArrayList<User>();
            try {
                sqlSession = MyBatisUtil.createSqlSession();
                userList = sqlSession.getMapper(UserMapper.class).serchUserList(user);
                for(User user1 : userList){
                    logger.debug("address------------>"+user1.getUserCode());
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    SOFA 源码分析 — 自动故障剔除
    Pod——状态和生命周期管理及探针和资源限制
    pause的作用
    k8s-部署策略
    linux-删除一个目录下的所有文件,但保留某个或者多个指定文件
    k8s-gitlab搭建
    git中报unable to auto-detect email address 错误的解决拌办法
    k8s-secret用法
    k8s-traefik默认80端口
    nginx和apache区别
  • 原文地址:https://www.cnblogs.com/cn-930621/p/7523745.html
Copyright © 2011-2022 走看看