三,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映射器三(insert,update,delete)

insert语句中,主键回填根据主键生成策略分为两种,一种为:自增,一种为特殊方式生成.所以回填方式也分为两种.—————————————————————————–bind,用于sql查询的模糊查询时...

J2EE系列之MyBatis学习笔记(三)-- 使用XML配置SQL映射器

第一节博客是实例中数据库操作方法定义在了接口文件StudentMapper.java中,而这些操作的实现代码定义在了映射文件StudentMapper.xml中。这里把这个映射文件StudentMap...

06.Mybatis初级使用-Mapper映射器(三)

Mapper映射器

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

在上一章,我们看到了我们是怎样在映射器Mapper XML配置文件中配置映射语句的。MyBatis也支持使用注解来配置映射语句。当我们使用基于注解的映射器接口时,我们不再需要在XML配置文件中配置了。...

J2EE系列之MyBatis学习笔记(十一)-- 使用注解配置sql映射器

这里讲一下使用注解方式实现mybatis的关系映射(一对一映射和一对多映射) 一、一对一映射 1.新建类Address(直接从前面讲使用xml配置方式实现关系映射的工程中复制即可): packa...

mybatis映射器注解

映射器注解 因为最初设计时,MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,而且 映射语句也是定义在 XML 中的。而到了 MyBatis 3,有新的可用的选择了。MyBati...

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

MyBatis的SqlSession中包括方法,映射sql等等。 SqlSession中包括了很多方法,简单截了个图如下: 包括了增删改查等方法以及方法的多种重载形式等等。 直接使用Sq...

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

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

Mybatis映射器

select insert update delete 参数 sql元素 resultMap 缓存 映射器主要元素 select 查询(可以自定义参数,返回结果集)insert 插...

MyBatis知识盘点【肆】_映射器

select元素 id:唯一主键 parameterType:参数类型,可指定bean resultType:返回结果集类型 resultMap:自定义映射规则和resultType 2选1 flus...
  • xinzun
  • xinzun
  • 2017年11月16日 16:14
  • 42
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三,MyBatis映射器及CRUD
举报原因:
原因补充:

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