MyBatis框架

Posted ruanjiancainiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
        }
    }

}

 

以上是关于MyBatis框架的主要内容,如果未能解决你的问题,请参考以下文章

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

Mybatis框架第二篇

markdown [mybatis参考]关于mybatis #mybatis的一些片段

mybatis第二天

MyBatis动态SQL

mybatis学习(39):动态sql片段