本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

转载请注明 出自 : luogg的博客园 谢谢配合!

当数据库字段和实体bean中属性不一致时

之前数据库Person名字字段是name,PersonBean中属性也是name,但是之后数据库中修改为了user_name,
  • 方法1:通过sql语句的字段起别名,别名和实体中的对象属性一致

    SELECT id,user_name as name,sex,age from person

    <select id="find" resultType="com.luogg.domain.Person">
    SELECT id,user_name as name,sex,age from person
    </select>
  • 方法2: mybatis最强大的地方 : reslutMap对象

      添加一个中介reslutMap标签,并将select标签中的resultType改为resultMap,并对应resultMap标签的id.
    
      结果集:resultType 基础类型,int,string,Person,
    resultMap 针对中介标签resultMap而存在.
    <!--配置命名空间,命名空间+ .id 是唯一的sql语句标示符-->
<mapper namespace="com.luogg.mapper.PersonMapper"> <!--中介,当数据库字段和实体bean对象属性不一致时,做一个对应关系-->
<resultMap id="personRM" type="com.luogg.domain.Person">
<!--主键映射-->
<id property="id" column="ID"></id>
<!--普通字段,property指实体属性,column结果集的字段名称,一致的字段可以不写-->
<result property="name" column="USER_NAME"></result>
</resultMap> <!--查询所有数据,参数有id,resultType结果集,parameterType参数-->
<!--注意 : sql语句中如果有要填写集合的,比如查询所有数据,返回一个Person的结果集,那么resultType参数直接写 路径+集合的类型
比如: 返回一个Person集合,那么就填写Person Bean所在的路径+Person-->
<select id="find" resultMap="personRM">
SELECT * from person
</select> <!--通过ID查询数据,当有查询条件时,需要写parameterType,返回结果集仍然是Person, #{id}或者${id}都可以-->
<select id="selById" parameterType="int" resultType="com.luogg.domain.Person">
SELECT * FROM person WHERE id = #{id}
</select>
</mapper>

mybatis的增删改查

新增人员信息

首先在PersonMapper.xml中添加insert标签,我们的数据库字段user_name,Person实体属性为name,不一致,区别开来.然后在TestMybatis中写入代码.
<!--添加人员-->
<insert id="insert" parameterType="com.luogg.domain.Person">
INSERT INTO person(id,user_name,age,sex) VALUES(#{id},#{name},#{age},#{sex})
</insert>
package test;

import com.luogg.domain.Person;
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 org.junit.Before;
import org.junit.Test; import java.io.IOException;
import java.io.InputStream;
import java.util.List; /**
* Created by luogg on 2017/2/17.
*/
public class TestMybatis {
//SqlSessionFactory为线程安全的
private SqlSessionFactory factory; @Before
public void init() throws IOException {
String resource = "sqlMapConfig.xml";
InputStream is = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(is);
} @Test //查询所有
public void findAll() throws IOException {
/**
* 测试数据库的连接
* 1.定义一个String类型的变量resource,指向刚才配置的连接数据库的xml文件
* 2.创建一个输入流,来读取我们的数据库配置文件
* 3.输入流创建工厂.
* 4.有了工厂之后open工厂
* 5.通过session访问配置文件中的sql语句
*/ SqlSession session = factory.openSession(); //如何访问PersonMapper.xml中的sql语句呢? 命名空间+ .id
List<Person> list = session.selectList("com.luogg.mapper.PersonMapper.find");
System.out.println(list.size());
for(Person p : list){
System.out.println(p);
}
}
@Test //通过ID查询人员信息
public void selById(){
SqlSession session = factory.openSession();
Person p = session.selectOne("com.luogg.mapper.PersonMapper.selById",1);
System.out.println(p);
} @Test //添加人员信息
public void add(){
SqlSession session = factory.openSession();
Person p = new Person();
p.setId(4);
p.setName("luogg");
p.setAge(22);
p.setSex(1);
int i = session.insert("com.luogg.mapper.PersonMapper.insert",p);
session.commit();
if(i==1){
System.out.print("添加人员成功");
}
}
}

修改人员信息 , 查询总的记录条数

prsonMapper.xml文件

<!--修改成员信息-->
<update id="update" parameterType="com.luogg.domain.Person">
UPDATE person SET user_name=#{name},age=#{age} WHERE id=#{id}
</update> <!--查询总的记录-->
<select id="count" resultType="int">
SELECT COUNT(*) FROM person
</select>

TestMybatis.java文件

@Test //修改人员信息
public void updatePer(){
SqlSession session = factory.openSession();
Person p = new Person();
p.setId(4);
p.setName("luoggg");
//p.setSex(1);
p.setAge(23);
int i = session.update("com.luogg.mapper.PersonMapper.update",p);
session.commit();
if(i==1){
System.out.print("修改信息成功");
}
} @Test //查询总的记录条数
public void selCount(){
SqlSession session = factory.openSession();
int i = session.selectOne("com.luogg.mapper.PersonMapper.count");
System.out.println(i);
}

条件查询

根据条件查询
<!--带条件查询-->
<select id="selByL" parameterType="map" resultMap="personRM">
SELECT <include refid="cols"/> FROM person
where user_name like #{name}
AND sex=#{sex}
</select>

@Test //带条 件查询
public void selByL(){
SqlSession session = factory.openSession();
Map<String,Object> map = new HashMap<String, Object>();
map.put("name","luo%");
map.put("sex",1);
List<Person> list = session.selectList("com.luogg.mapper.PersonMapper.selByL",map);
System.out.println(list.size());
for(Person p : list){
System.out.println(p);
}
}

MyBatis入门2_增删改查+数据库字段和实体字段不一致情况的更多相关文章

  1. Mybatis入门之增删改查

    Mybatis入门之增删改查 Mybatis如果操作成功,但是数据库没有更新那就是得添加事务了.(增删改都要添加)----- 浪费了我40多分钟怀疑人生后来去百度... 导入包: 引入配置文件: sq ...

  2. MyBatis入门案例 增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  3. mybatis入门(二):增删改查

    mybatis的原理: 1.mybatis是一个持久层框架,是apache下的顶级项目 mybatis托管到googlecode下,目前托管到了github下面 2.mybatis可以将向prepar ...

  4. mybatis入门二-----增删改查

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  5. Spring Boot 使用Mybatis注解开发增删改查

    使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...

  6. MyBatis -- 对表进行增删改查(基于注解的实现)

    1.MyBatis对数据库表进行增/删/改/查 前一篇使用基于XML的方式实现对数据库的增/删/改/查 以下我们来看怎么使用注解的方式实现对数据库表的增/删/改/查 1.1  首先须要定义映射sql的 ...

  7. Mybatis实现简单增删改查

    Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...

  8. MyBatis简单的增删改查以及简单的分页查询实现

    MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...

  9. django之创建第8-1个项目-数据库之增删改查/数据库数据显示在html页面

    1.为test.DB数据库预先创建下面数据 1    张三    16    2015-01-02    12    李四    17    2015-01-04    13    王五    14  ...

随机推荐

  1. ios学习之旅---指针也不难

    1.认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2 ...

  2. 一个JS多个数组取交集算法

    如题,多个数组中取交集(共同拥有元素),思路取第一个数组去跟每个数组中的元素对比,同时比较数据类型有救返回没有就返回null. 下面介绍到的算法数据格式是二维数组如: const parentArra ...

  3. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

  4. 自然语言处理中的Attention Model:是什么及为什么

    /* 版权声明:能够随意转载.转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 要是关注深度学习在自然语言处理方面的研究进展,我相信你一定听说过Attention Model(后文有 ...

  5. docker(1):virtualbox 安装CoreOS系统,配置registry-mirror

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/51093850 未经博主同意不得转载. 博主地址是:http://blog.csd ...

  6. IFFT 的实现

    IFFT 的实现 前些天给出了FFT的实现,如今给出IFFT(inverse FFT)的实现 基于IFFT 算法.对FFT的核心程序稍作改动就可以 : ) %%******************** ...

  7. Mongo性能测试-python脚本

    单线程 500+w条数据,插入时间:1小时,13分钟. 脚本: [root@10 hurl]# cat insert-mongo2.py #!/usr/bin/env python #coding=u ...

  8. 搜狗输入法APP的2个剪切板内容获取入口

    搜狗输入法APP的2个剪切板内容获取入口

  9. 【Bzoj2260】【Bzoj4349】商店购物 & 最小树形图

    目录 List Bzoj 2260 商店购物 Description Input Output Sample Input Sample Output Bzoj 4349 最小树形图 Descripti ...

  10. Ned的难题

    题目描述 Ned再也看不下去Robert的种种恶习,于是他决定出一道题来让他醒悟. Ned的题目是这样: 给出一个有n个数的序列,求其中所有连续子序列的数的最大公因数的乘积模1000000009的值. ...