1.实体类User.java

    public class User {
private int id;
private String name;
private int age;
//getter、setter...
}

2.映射文件userMapper.xml

<?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">
<mapper namespace="com.test.withXml.UserMapper">
<!-- 自定义结果集 -->
<resultMap type="com.test.bean.User" id="userMap">
<id property="id" column="id" javaType="java.lang.Integer"/>
<result property="name" column="name" javaType="java.lang.String"/>
<result property="age" column="age" javaType="java.lang.Integer"/>
</resultMap>
<!-- 增删改查标签的id属性必须和接口中的方法名相同,
id属性值必须是唯一的,不能够重复使用,
parameterType属性表示形参参数类型,
resultType属性表示查询时返回的结果集类型
-->
<!-- userGeneratedKeys(仅对insert有用),会告诉Mybatis使用JDBC的getGeneratedKeys方法来取出由MySQL内部生成的主键,
默认值false。
keyProperty(仅对insert有用)标记一个属性,mybatis会通过getGeneratedKey或者通过insert语句的selectKey子元素设置值
默认不设置。
-->
<insert id="addUser" useGeneratedKeys="true" keyProperty="id" parameterType="com.test.bean.User">
insert into users (name,age) values (#{name},#{age})
</insert> <delete id="deleteUser" parameterType="int">
delete from users where id = #{id}
</delete> <update id="updateUser" parameterType="com.test.bean.User">
update users set name=#{name},age=#{age} where id=#{id}
</update> <select id="queryUser" parameterType="int" resultType="com.test.bean.User" >
select * from users where id = #{id}
</select> <select id="queryAllUser" resultMap="userMap">
select * from users
</select> <select id="queryBuyName" parameterType="String" resultMap="userMap">
select * from users where name like #{name}
</select> </mapper>

3.全局配置文件mybatis.cfg.xml

<?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">
<configuration>
<!-- 映入外部配置文件 -->
<properties resource="mysql.properties"></properties>
<!-- 配置mybatis运行环境,development:开发模式,work:工作模式-->
<environments default="development">
<environment id="development">
<!-- type=“jdbc”表示使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了三种数据源类型,POOLED,UNPOOLED,JNDI -->
<!-- POOLED:表示支持JDBC数据源的连接池 -->
<!-- UNPOOLED:表示不支持JDBC数据源的连接池 -->
<!-- JNDI:表示支持外部数据源连接池 -->
<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>
<!-- 基于xml映射文件的增删改查,注册映射文件 -->
<mapper resource="com/test/withXml/userMapper.xml"/>
</mappers>
<!-- 为实体类定义别名,简化sql映射xml文件中的引用 -->
<!-- <typeAliases>
<typeAlias type="com.test.bean.User" alias="_User"/>
</typeAliases> -->
</configuration>

4.数据库配置文件mysql.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis1?useUincode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

5.测试类

/**
* @author:滕鹏飞
* @version: 1.0
* @Created on: 2018-9-2 下午8:32:54
* 类说明:基于XML文件
*/
public class Test { public static void main(String[] args) {
//addUser();
//delete();
//update();
//query();
queryBuyName();
} /**
* 添加数据
*/
public static void addUser(){
SqlSession sqlSession = DBUtil.getSession();
User user = new User("张三三", 21);
sqlSession.insert("com.test.withXml.UserMapper.addUser",user);
sqlSession.close();
} /**
* 删除数据
*/
public static void delete(){
SqlSession sqlSession = DBUtil.getSession();
sqlSession.delete("com.test.withXml.UserMapper.deleteUser","3");
sqlSession.close();
} /**
* 修改数据
*/
public static void update(){
SqlSession sqlSession = DBUtil.getSession();
User user = new User(5,"张三三", 21);
sqlSession.update("com.test.withXml.UserMapper.updateUser", user);
sqlSession.close();
} /**
* 查找数据
*/
public static void query(){
SqlSession sqlSession = DBUtil.getSession();
User user = sqlSession.selectOne("com.test.withXml.UserMapper.queryUser", 4);
System.out.println(user);
} /**
* 根据name进行模糊查询
*/
public static void queryBuyName(){
SqlSession sqlSession = DBUtil.getSession();
List<User> user = sqlSession.selectList("com.test.withXml.UserMapper.queryBuyName", "%三%");
System.out.println(user);
}
}

注意:

1.若使用自定义结果集则使用结果集的属性为resultMap,不是resultType,若使用全类名则使用resultType
2.入参:
parameterType:可以是类,需要写全类名,也可以是基本数据类型
出参:
自定义类型:resultMap
指定类型:resultType
3.自动提交事务:
1.sessionFactory.openSession(true);
2.session.commit();该方式增删改都必须添加,查询可以不用
4.若同时使用XML文件映射SQL和映射文件对应的接口,比如UserMapper.java和userMapper.xml,若在映射文件中使用namespace属性,则在配置文件中就不需要在引入,否则需要同时引入接口类和映射文件,namespace命名规范:映射文件所在路径+映射文件名。
5.表字段的名称和类属性的名称不一致的情况
解决办法一: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。
select t_id id, t_name name from teacher where t_id = #{id}
解决办法二: 通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。
<resultMap type="com.test.bean.User" id="userMap">
<id property="id" column="id" javaType="java.lang.Integer"/>
<result property="name" column="name" javaType="java.lang.String"/>
<result property="age" column="age" javaType="java.lang.Integer"/>
</resultMap>

Mybatis_2.基于XML的增删改查的更多相关文章

  1. Mybatis之基于XML的增删改查

    这里先吐槽下,写的半天的东西,IE浏览器弹出调试窗口导致写的东西全部没保存,搞得我还要重新用谷歌写,思路全没了,fuck. 前面学习了下spring的DAO层,说起DAO层,那ORM肯定是少不了的,O ...

  2. Mybatis_3.基于注解的增删改查

    1.实体类User.java public class User { private int id; private String name; private int age; //getter.se ...

  3. ASP.NET Web API基于OData的增删改查,以及处理实体间关系

    本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先是比较典型的一对多关系,Supplier和Product. public class Product { ...

  4. [转]ASP.NET Web API基于OData的增删改查,以及处理实体间关系

    本文转自:http://www.cnblogs.com/darrenji/p/4926334.html 本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先 ...

  5. VB&XML的增删改查

    简介:XML的增删改查 开发过程中有许多后台操作XML的过程,每次需要操作时都是找很多代码来参考或者百度一下.今天决定补充下XML操作的知识,把XML操作的增删改查都写了一遍,供以后开发参考 查询: ...

  6. 对oracle里面clob字段里面xml的增删改查学习

    这段时间,我使用系统表里面有clob字段里面存放的xml信息,我们如何对xml进行增删改查操作呢,自己参考了很多也学到很多,给大家分享一下 首先我们先建测试表 CREATE TABLE EFGP_23 ...

  7. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

  8. java实现xml文件增删改查

    java一次删除xml多个节点: 方案1.你直接改动了nodeList,这一般在做循环时是不同意直接这么做的. 你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常. ...

  9. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

随机推荐

  1. C#中的Finalize,Dispose,SuppressFinalize的实现和使用介绍

    原文地址:http://www.csharpwin.com/csharpspace/8927r1397.shtml MSDN建议按照下面的模式实现IDisposable接口: public class ...

  2. Teamviewer远程ssh命令行更改密码启动

    Teamviewer远程ssh命令行更改密码启动 设置密码 $ sudo teamviewer passwd [NewPasswd ] 查看teamviewer信息 $ teamviewer info ...

  3. 第四节:框架前期准备篇之进程外Session的两种配置方式

    一. 基本介绍 1. 背景:Asp.Net默认的Session机制是进程内,存储在服务器端内存中,有这么几个缺点: ①:既然存在内存中,空间有限,不能存储大数据量信息,数据量多的话Session会被挤 ...

  4. Vorticity directions 1: self-improving property of the vorticity

    在 [Li, Siran. "On Vortex Alignment and Boundedness of $ L^ q $ Norm of Vorticity." arXiv p ...

  5. Pycharm新建模板默认添加作者时间等信息

    在pycharm使用过程中,对于每次新建文件的shebang行和关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings 2. ...

  6. JVM--02

    Java虚拟机内存管理: 共享: 方法区:存储运行时常量池.已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据 java堆:存储对象实例 线程独占区: 虚拟机栈:存放方法运行时所需的 ...

  7. windows :config windows update … 一直处于假死状态

    参考文章:http://www.cnblogs.com/teacat/p/9204225.html 环境:win7 64bit 旗舰版 问题:重启后,系统更新到35%后,一直处于假死状态,未能正确进入 ...

  8. 【原创】大数据基础之Parquet(1)简介

    http://parquet.apache.org 层次结构: file -> row groups -> column chunks -> pages(data/index/dic ...

  9. flex使内部内容自适应宽度

  10. Java面试题复习笔记(Web方向)

    1.Http中get和post请求的区别? 共同点:都是Http请求方式,用户可以通过不同的请求方式完成对资源(Url)的操作.具体来讲就是get一般用于获取/查询资源信息,post用于更新资源信息. ...