源码:https://github.com/carryLess/mbtsstd-003

1.主配置文件

<?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-3.4.4.pdf文件中搜索mybatis-3-config.dtd即可得到 -->
<configuration> <!-- 指定属性配置文件 -->
<properties resource="jdbc.properties" />
<!--
配置类的别名,我建议使用package这种写法
这样写会将该包中所有类的简单类名配置为别名,简单方便
,还有别的写法,自行google
-->
<typeAliases>
<package name="model" />
</typeAliases>
<!-- 配置MyBatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC事务管理 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 注册映射文件 -->
<mappers>
<mapper resource="dao/mapper.xml"/>
<!--
实际开发中可能有多个映射文件,而其中sql标签的id相同时候,执行过程就会报错
我们可以根据mapper映射文件中的namespace属性来区分,调用时候用如下方式
namespace.id
-->
<!--
<mapper resource="dao/mapper2.xml"/>
-->
</mappers> </configuration>

2.mapper映射文件

<?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">
<!-- 文件头在解压的文件夹中mybatis-3.4.4.pdf文件中搜索mybatis-3-mapper.dtd即可得到 -->
<mapper namespace="model.SStudent">
<!-- parameterType属性,框架会根据SQLSession中传递的参数检测到,所以我们一般不用指定 -->
<insert id="insertStudentByList">
insert into SStudent(sname,sage,score) values
<!-- 这里面的collection必须写成list -->
<foreach collection="list" separator="," item="stu">
(#{stu.name},#{stu.age},#{stu.score})
</foreach>
</insert> <!-- 使用别名 -->
<select id="selectById1" resultType="SStudent">
select sid id,sname name,sage age,score from sstudent where sid = #{xxx}
</select> <!-- 使用resultMap -->
<select id="selectById2" resultMap="sStudentMapper">
select sid,sname,sage,score from sstudent where sid = #{xxx}
</select> <!--
type:要映射的实体类
id:resultMap标签的id,用于select标签中resultMap属性
-->
<resultMap id="sStudentMapper" type="SStudent">
<id column="sid" property="id" />
<result column="sname" property="name" />
<result column="sage" property="age" />
</resultMap> </mapper>

3.实体类

package model;

/**
* Created by carryLess on 2017/11/29.
*/
public class SStudent {
private Integer id;
private String name;
private Integer age;
private double score; public SStudent() {
} public SStudent(String sname, Integer sage, double score) {
this.name = sname;
this.age = sage;
this.score = score;
} @Override
public String toString() {
return "SStudent{" +
"id=" + id +
", sname='" + name + '\'' +
", sage=" + age +
", score=" + score +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getSname() {
return name;
} public void setSname(String sname) {
this.name = sname;
} public Integer getSage() {
return age;
} public void setSage(Integer sage) {
this.age = sage;
} public double getScore() {
return score;
} public void setScore(double score) {
this.score = score;
}
}

4.dao接口与实现类

package dao;

import model.SStudent;

import java.util.List;
import java.util.Map; /**
* Created by carryLess on 2017/11/29.
*/
public interface IStudentDao { /**
* 插入集合
* @param studentList
*/
void insertStudentByList(List<SStudent> studentList); /**
* 根据id查询1
* @param id
* @return
*/
SStudent selectById1(int id); /**
* 根据id查询2
* @param id
* @return
*/
SStudent selectById2(int id);
}
package dao;

import model.SStudent;
import org.apache.ibatis.session.SqlSession;
import utils.MyBatisUtils; import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* Created by carryLess on 2017/11/29.
*/
public class StudentDaoImpl implements IStudentDao {
private SqlSession sqlSession; @Override
public void insertStudentByList(List<SStudent> studentList) {
try {
sqlSession = MyBatisUtils.getSqlSession();
sqlSession.insert("insertStudentByList", studentList);
sqlSession.commit();
}finally {
//关闭sqlSession
if(sqlSession != null){
sqlSession.close();
}
}
} @Override
public SStudent selectById1(int id) {
SStudent sStudent;
try {
sqlSession = MyBatisUtils.getSqlSession();
sStudent = sqlSession.selectOne("selectById1", id);
} finally {
if(sqlSession != null){
sqlSession.close();
}
}
return sStudent;
} @Override
public SStudent selectById2(int id) {
SStudent sStudent;
try {
sqlSession = MyBatisUtils.getSqlSession();
sStudent = sqlSession.selectOne("selectById2", id);
} finally {
if(sqlSession != null){
sqlSession.close();
}
}
return sStudent;
}
}

5.工具类

package utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException;
import java.io.InputStream; /**
* Created by carryLess on 2017/11/30.
*/
public class MyBatisUtils { /*
* SqlSession 由SqlSessionFactory对象创建,
* 而SqlSessionFactory对象为重量级对象
* 并且是线程安全的,所以我们将其设为单例
* */
private static SqlSessionFactory factory; /**
* 私有化构造方法,避免该工具类在外部被实例化
*/
private MyBatisUtils(){} /**
* 获取 SqlSession
* @return
*/
public static SqlSession getSqlSession(){
try {
if(factory == null){
//读取配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//创建工厂类
factory = new SqlSessionFactoryBuilder().build(inputStream);
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
/*
* factory.openSession(true); 创建一个有自动提交功能的SqlSession
* factory.openSession(false); 创建一个没有自动提交功能的SqlSession,需要手动提交
* factory.openSession(); 同factory.openSession(false);
*/
return factory.openSession();
}
}

6.测试类

package test;

import dao.IStudentDao;
import dao.StudentDaoImpl;
import model.SStudent;
import org.junit.Before;
import org.junit.Test; import java.util.ArrayList;
import java.util.List; /**
* Created by carryLess on 2017/11/29.
*/
public class MyTest { private IStudentDao dao; @Before
public void initDao(){
dao = new StudentDaoImpl();
} @Test
public void testInsertList(){
List<SStudent> sStudentList = new ArrayList<SStudent>();
for(int i = 11;i<20;i++){
SStudent sStudent = new SStudent();
sStudent.setSname("zhangs-"+i);
sStudent.setSage(25+i);
sStudent.setScore(90);
sStudentList.add(sStudent);
}
dao.insertStudentByList(sStudentList);
} @Test
public void testSelectById(){
SStudent sStudent = dao.selectById2(18);
System.out.println(sStudent);
} }

MyBatis_Study_003(字段名与属性名称不一致,resultMap)的更多相关文章

  1. json字符串转java对象,json中字段名称与对象属性名称不一致

    json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决

  2. 在oracle中操作表及字段注释,查询一个表的所有字段名以及属性和约束

    1.查询表注释 SELECT * FROM USER_TAB_COMMENTS; 三列:TABLE_NAME,TABLE_TYPE,COMMENTS 2.查询字段注释 SELECT * FROM US ...

  3. hibernate字段名和属性

    字段名和属性名相同 Annotation:默认为@Basic 注意:如果在成员属性没有加入任何注解,则默认在前面加入了@Basic Xml中不用写column 字段名和属性名不同 Annotation ...

  4. 字段名与属性名不一致问题 通过resultMap解决

  5. 懒汉处理dapper字段名与属性名的映射方式

    你还以为走路是世上最简单的事情呢?只不过是把一只脚放到另一只脚前面.但我一直很惊讶这些原本是本能的事情实际上做起来有多困难.而吃,吃也是一样的,有些人吃起东西来可困难了.说话也是,还有爱.这些东西都可 ...

  6. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...

  7. MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  8. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  9. MyBatis——解决字段名与实体类属性名不相同的冲突

    原文:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况 ...

随机推荐

  1. update t_conference set c_address = replace(c_address,'中华人民共和国','');

    update t_conference set c_address = replace(c_address,'中华人民共和国','中国');      //把c_address字段中的‘中华人民共和国 ...

  2. Fiddler抓包工具使用方法

    Fiddler是最强大最好用的Web调试工具之一, 它能记录所有客户端和服务器的http和https请求.允许你监视.设置断点.甚至修改输入输出数据.Fiddler包含了一个强大的基于事件脚本的子系统 ...

  3. 20135320赵瀚青LINUX第七周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...

  4. 2018-2019-1 20189218《Linux内核原理与分析》第二周作业

    问题一 动态库链接找不到库问题 这个问题当时确实对我造成了很大的困扰,虽然最终仍然成功用动态库链接但是问题并没有解决.现在回过头来看却觉得有点蠢,但出错的过程仍然值得总结.首先看我的目录结构: 可以看 ...

  5. vs+qt使用资源文件

    1.在Resources目录新建一个.qrc文件 2.在解决方案的Resource Files中添加这个文件 3.为这个qrc添加资源,建议把资源都放进Resources

  6. FastCGI介绍及Nginx fastcgi配置优化

    FastCGI介绍 FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务 ...

  7. [转]手机web HTML头信息解释和viewport meta标签解释

    <meta charset="utf-8" /> <link rel="shortcut icon" href="favicon.i ...

  8. 科幻小说《霜与火》 by 雷·布雷德伯里

    漫漫长夜中,西姆出世了,躺在山洞冰凉的石头上,嗷嗷大哭,浑身血液奔流,脉搏每分钟一千跳.他不停地长大.妈妈用发烫的双手喂西姆吃东西.人生的梦魔开场了.一来到世间,他的眼睛就闪烁着警觉的光芒:而后又令人 ...

  9. UVa 10534 波浪子序列(快速求LIS)

    https://vjudge.net/problem/UVA-10534 题意:给定一个长度为n的整数序列,求一个最长子序列(不一定连续),使得该序列的长度为2k+1,前k+1个数严格递增,后k+1个 ...

  10. Codeforces Round #169 (Div. 2) E. Little Girl and Problem on Trees dfs序+线段树

    E. Little Girl and Problem on Trees time limit per test 2 seconds memory limit per test 256 megabyte ...