三,MyBatis映射器及CRUD

原创 2016年08月30日 12:18:58

1,mybatis基础

1.1,全局参数设置settings

可以将mybatis默认的全局参数设置可以被覆盖,以满足开发人员的自定义需求。

<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25000" />
<setting name="safeRowBoundsEnabled" value="false" />
<setting name="mapUnderscoreToCamelCase" value="false" />
</settings>

1.2,Mappers

Mapper XML文件中包含的SQL映射语句将会被应用通过使用期statementid来执行,需要在mybatis-config.xml文件中配置mapper的映射地址

<mappers>
<mapper resource="com/mybatis/mappers/StudentMapper.xml" />
<mapper url="file:///D:/mybatisdemo/app/mappers/TutorMapper.xml" />
<mapper class="com.mybatis.mappers.TutorMapper" />
<package name="com.mybatis.mappers" />
</mappers>
  • resource:用来指定在classpath中的mapper文件
  • url:通过完全文件系统路径或者 web URL 地址来指向 mapper 文件
  • class:用来指向一个 mapper 接口
  • package:用来指向可以找到 Mapper 接口的包名

1.3,日志

MyBatis 使用其内部 LoggerFactory 作为真正的日志类库使用的门面。其内部的 LaggerFactory 会将日志记录任务委托给如下的所示某一个日志实现,日志记录优先级由上到下顺序递减:

  • SLF4J
  • Apache Commons Logging
  • Log4j2
  • Log4j
  • JDK logging

2,SQL映射器

2.1,映射器配置文件和映射器接口

在工程src/main/resources包下面有文件夹mappers里面存放userMapper.xml映射器文件:

在select中还存在一个属性resultMap,在映射器接口中所对应方法执行返回回来的数据类型
图片代码select 应该改成 insert

在代码中使用这样的方式调用映射器中的SQL语句:

        //红色字样的为核心代码
        SqlSession session = MyBatisUtil.openSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        User user = new User();
        user.setName("wangwu");
        user.setEmail("wangwu@email.com");
        PhoneNumber phone = new PhoneNumber();
        phone.setCountryCode("86");
        phone.setStateCode("1599");
        phone.setNumber("1234567");
        user.setPhone(phone);
        userMapper.insertUser(user);
        session.commit();
        session.close();

或者使用这样的方式实现代码:

public void insertUser(){
        SqlSession session = MyBatisUtil.openSession();
        //UserMapper userMapper = session.getMapper(UserMapper.class);
        User user = new User();
        user.setName("wangwu");
        user.setEmail("wangwu@email.com");
        PhoneNumber phone = new PhoneNumber();
        phone.setCountryCode("86");
        phone.setStateCode("1599");
        phone.setNumber("1234567");
        user.setPhone(phone);
        //userMapper.insertUser(user);
        //com.mybatis.mappers.UserMapper.insertUser使用UserMapper映射器中的insertUser方法**
        //user为该方法所需要的参数**
        session.insert("com.mybatis.mappers.UserMapper.insertUser", user);
        session.commit();
        session.close();
    }

com.mybatis.mappers.UserMapper映射器接口

2.2,CRUD(create,retrieve,update,delete)

2.2.1,create(insert)

需要在映射器文件中配置如下代码:

<insert id="insertStudent" parameterType="Student">
INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL, PHONE)
VALUES(#{studId},#{name},#{email},#{phone})
</insert>

java代码中调用如下:

int count =
sqlSession.insert("com.mybatis3.mappers.StudentMapper.insertStudent", student);

或者

StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
int count = mapper.insertStudent(student);

映射器接口类:

package com.mybatis3.mappers;
public interface StudentMapper
{
int insertStudent(Student student);
}

自动生成主键

<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true"
keyProperty="studId">
INSERT INTO STUDENTS(NAME, EMAIL, PHONE)
VALUES(#{name},#{email},#{phone})
</insert>

useGeneratedKeys询问是否采用自动生成主键的方式,默认为false;keyProperty在要插入对象中主键的属性名,也就是用户的id。
对于一些不支持主键生成策略的数据库而言,应该使用如下的方式:

<insert id="insertStudent" parameterType="Student">
    <selectKey keyProperty="studId" resultType="int" order="BEFORE">
        SELECT ELEARNING.STUD_ID_SEQ.NEXTVAL FROM DUAL
    </selectKey>
    INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL, PHONE)
    VALUES(#{studId},#{name},#{email},#{phone})
</insert>
  • 这里我们使用了子元素来生成主键值,并将值保存到 Student 对象的 studId 属性上。 属性order=“before”表示 MyBatis 将取得序列的下一个值作为主键值,并且在执行 INSERT SQL 语句之前将值设置到studId 属性上。

  • 也可以在获取序列的下一个值时,使用触发器(trigger)来设置主键值,并且在执行 INSERT SQL 语句之前将值设置到主键列上。 如果你采取这样的方式,则对应的 INSERT 映射语句如下所示:

<insert id="insertStudent" parameterType="Student">
    INSERT INTO STUDENTS(NAME,EMAIL, PHONE)
    VALUES(#{name},#{email},#{phone})
    <selectKey keyProperty="studId" resultType="int" order="AFTER">
        SELECT ELEARNING.STUD_ID_SEQ.CURRVAL FROM DUAL
    </selectKey>
    </insert>

2.2.2,retrieve(select)

映射器xml配置:

<select id="findStudentById" parameterType="int" resultType="Student">
    SELECT STUD_ID as studId, NAME, EMAIL, PHONE
    FROM STUDENTS
    WHERE STUD_ID=#{studId}
</select>

调用语句:

int studId =1;
Student student = sqlSession.selectOne("com.mybatis3.mappers.StudentMapper.findStudentById", studId);

或者

StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Student student = mapper.findStudentById(studId);

映射器接口:

package com.mybatis3.mappers;
public interface StudentMapper
{
Student findStudentById(Integer studId);
}

对于返回多条结果的可以使用如下java代码:

List students = sqlSession.selectList("com.mybatis3.mappers.StudentMapper.findAllStudents");

除了 java.util.List,你也可以是由其他类型的集合类,如 Set,Map,以及(SortedSet) 。 MyBatis 根据集合的类型,会采用适当的集合实现,如下所示:

  • 对于 List,Collection,Iterable 类型,MyBatis 将返回 java.util.ArrayList
  • 对于 Map 类型,MyBatis 将返回 java.util.HashMap
  • 对于 Set 类型,MyBatis 将返回 java.util.HashSet
  • 对于 SortedSet 类型,MyBatis 将返回 java.util.TreeSet

2.2.3,update

映射器配置文件:

<update id="updateStudent" parameterType="Student">
    UPDATE STUDENTS SET NAME=#{name}, EMAIL=#{email}, PHONE=#{phone}
    WHERE STUD_ID=#{studId}
</update>

java调用:

int studId = 1;
int noOfRowsDeleted = sqlSession.delete("com.mybatis3.mappers.StudentMapper.deleteStudent", studId);

2.2.4,delete

映射配置文件:

<delete id="deleteStudent" parameterType="int">
    DELETE FROM STUDENTS WHERE STUD_ID=#{studId}
</delete>

java调用:

int studId = 1;
int noOfRowsDeleted = sqlSession.delete("com.mybatis3.mappers.StudentMapper.deleteStudent", studId);

代码地址https://github.com/ConjaneJiang/mybatis-crud.git

版权声明:本文为博主原创文章,未经博主允许不得转载。

MyBatis 使用笔记(3) Mapper映射器详解

上一篇文章 给大家讲了MyBatis的详细配置,这篇文章就给大家讲讲MyBatis在使用过程中最重要的东西Mapper映射器在使用上 主要分以下几种: 元素 说明 1.select 查询...
  • brok1n
  • brok1n
  • 2017年03月28日 16:13
  • 949

MyBatis使用大全(5)------映射器类

MyBatis的SqlSession中包括方法,映射sql等等。 SqlSession中包括了很多方法,简单截了个图如下: 包括了增删改查等方法以及方法的多种重载形式等等。 直接使用Sq...
  • helongzhong
  • helongzhong
  • 2017年01月04日 17:20
  • 647

Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器

关系型数据库和SQL是经受时间考验和验证的数据存储机制。和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务...
  • u010349169
  • u010349169
  • 2014年06月28日 20:46
  • 7059

04.Mybatis初级使用-Mapper映射器(一)

Mapper映射器是Mybatis中的核心工具,也是Mybatis的核心功能。通过映射器,我们可以自定义SQL语句,灵活的操作数据库,这也是Mybatis的特色所在。所以,熟练使用映射器是掌握Myba...
  • luzhen1012
  • luzhen1012
  • 2017年03月20日 18:28
  • 1079

mybatis的映射器(mappers)学习理解

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法...
  • xiaozaq
  • xiaozaq
  • 2017年01月11日 13:27
  • 1593

Mybatis续、Mapper映射器接口规则

配置一个MyBatis的Cost。查询资费列表的。。 与上面相同。只不过单独抽出来了一个类并定义了一个静态方法来获取Sqlsessionpackage unity;import java.io.In...
  • qq_28295425
  • qq_28295425
  • 2016年12月31日 19:16
  • 809

用mybatis实现简单的CRUD

下面介绍如何用mybatis实现简单的增删改查功能,有两种方式,一种是通过xml配置文件实现,一种是通过注解实现。   仍然通过对user的操作进行说明,新建好项目并导入jar包后,新建数据库和表,...
  • xiangwanpeng
  • xiangwanpeng
  • 2016年12月20日 00:09
  • 490

Mybatis之映射器(mappers)

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法...
  • msj_god_boy
  • msj_god_boy
  • 2016年09月21日 21:08
  • 732

[MyBatis日记](3)映射器配置文件与映射器接口

前一篇文章中我们介绍了如何使用MyBatis创建一个简单的项目,我们已经看见了一些映射器配置文件中配置基本的映射语句,以及怎样使用SqlSession对象调用它们的例子。 1. 前景回顾 现...
  • SunnyYoona
  • SunnyYoona
  • 2016年02月13日 22:33
  • 2287

Mybatis环境搭建和进行简单的CRUD增删改查操作

1:首先引入所需要的jar包。包括mybatis-3.2.8.jar、mysql-connector-java-3.1.12-bin.jar、junit4.4.jar、log4j-1.2.17.jar...
  • qq_25821067
  • qq_25821067
  • 2016年09月20日 15:10
  • 494
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三,MyBatis映射器及CRUD
举报原因:
原因补充:

(最多只允许输入30个字)