【第22期】观点:IT 行业加班,到底有没有价值?

三,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

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

相关文章推荐

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

Mapper映射器

Mybatis菜鸟自学(一)

                                                      Mybatis学习             <span style="font-famil

欢迎关注CSDN程序人生公众号

关注程序员生活,汇聚开发轶事。

BizTalk Server 2010 - 映射器(Mapper) [ 下篇 ]

优化显示映射窗口中的链接 如果架构够大,我们的映射可能包括源和目标架构之间的大量链接。由于映射表面有许多链接,可能很难跟踪要处理的项目或链接。此外,跟踪源架构、链接、Functoid 和目标架构之间的端对端关系可能也很困难。在 BizTalk 映射器中,我们可以更好地管理复杂的大型架构,并可以优化显示映射中的链接。 为了能够更好地演示该功能,这里我准备了一个拥有大量链接的映射文件,它要

Mybatis

Mybatis 课程大纲 1、  回顾JDBC a)        编写JDBC代码 b)        JDBC代码的存在的问题 2、  Mybatis的概述 3、  快速入门 4、 ...

myBatis3与spring整合之注入映射器

myBatis3与spring整合之注入映射器(1) 博客分类:
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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