一.使用MyBatis对表执行CRUD操作——基于XML的实现

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">
<!--namespace一般命名成报名+映射名-->
<mapper namespace="me.gacl.mapping.userMapper">
<!--根据id查询-->
<select id="getUser" parameterType="int" resultType="me.gacl.domain.User">
select * from users where id=#{id}
</select>
<!--插入一条记录(Create)-->
<insert id="addUser" parameterType="me.gacl.domain.User">
insert into users(name ,age) values(#{name},#{age})
</insert>
<!--删除一条记录(Drop)-->
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
<!--更新(Update)-->
<update id="updateUser" parameterType="me.gacl.domain.User">
update users set NAME=#{name},age=#{age} where id=#{id}
</update>
<!--查询全部记录(Retrieve)-->
<select id="getAllUser" resultType="me.gacl.domain.User">
select * from users
</select>
</mapper>

测试类代码如下

 package me.gacl.domain;

 import me.gacl.Util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
/**
* Created by hu on 2017/8/26.
*/
public class TestCRUDByXMLMapper {
public void testAdd(){
//参数为true,表示事务自动提交,参数为false则需要手动提交
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//SqlSession sqlSession = MyBatisUtil.getSqlSession(false);
//要插入的user对象
User user = new User();
user.setName("芝麻糊");
user.setAge(17);
//statement是映射sql的标识字符串,me.gacl.mapping.userMapper是userMapper.xml中mapper标签的namespace属性,
// addUser是insert标签的id,通过insert标签的id值可以找到要执行的sql语句
String statement = "me.gacl.mapping.userMapper.addUser";
//执行插入操作
int resultAdd = sqlSession.insert(statement,user);
//手动提交
//sqlSession.commit();
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(resultAdd);
}
public void testUpdate(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//要更新的user对象
User user = new User();
user.setName("胡图图");
user.setAge(18);
user.setId(3);
//statement是映射sql的标识字符串,me.gacl.mapping.userMapper是userMapper.xml中mapper标签的namespace属性,
//updateUser是update标签的id,通过update标签的id值可以找到要执行的sql语句
String statement = "me.gacl.mapping.userMapper.updateUser";
//执行更新操作
int resultAdd = sqlSession.update(statement,user);
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(resultAdd);
}
public void testDelete(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//statement是映射sql的标识字符串,me.gacl.mapping.userMapper是userMapper.xml中mapper标签的namespace属性,
// deleteUser是delete标签的id,通过delete标签的id值可以找到要执行的sql语句
String statement = "me.gacl.mapping.userMapper.deleteUser";
//执行删除操作
int resultAdd = sqlSession.delete(statement,2);
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(resultAdd);
}
public void testGetAll(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//statement是映射sql的标识字符串,me.gacl.mapping.userMapper是userMapper.xml中mapper标签的namespace属性,
// getAllUser是select标签的id,通select标签的id值可以找到要执行的sql语句
String statement = "me.gacl.mapping.userMapper.getAllUser";
//执行查询全部操作
List <User> list = sqlSession.selectList(statement);
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(list);
} public static void main(String[] args) {
TestCRUDByXMLMapper testCRUDByXMLMapper = new TestCRUDByXMLMapper();
testCRUDByXMLMapper.testAdd();
// testCRUDByXMLMapper.testUpdate();
// testCRUDByXMLMapper.testDelete();
// testCRUDByXMLMapper.testGetAll();
}
}

在addTest插入数据库过程中出现中文乱码情况,将mybatis-config.xml中的链接URL加上【?characterEncoding=UTF-8】,则中文正常显示

执行了三次插入操作,如下图有两条乱码记录,最后一条是改了之后的

执行更新操作,结果如下图

执行删除操作,可以看到id=2的记录不见了

执行查询全部操作

二、使用MyBatis对表执行CRUD操作——基于注解的实现

1.定义sql映射的接口UserMapperI

 package me.gacl.map;

 import me.gacl.domain.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import java.util.List; /**
* 定义sql映射的接口,使用注解指明方法执行的SQL.
*/
public interface UserMapperI {
//使用@Insert注解指明add方法要执行的SQL
@Insert("insert into users(name,age) values(#{name},#{age})")
public int add(User user);
//使用@Update注解指明update方法要执行的SQL
@Update("update users set(name=#{name},age=#{age})")
public int update(User user);
//使用@Delete注解指明delete方法要执行的SQL
@Delete("delete from users where id=#{id}")
public int delete(int id);
//使用@Select注解指明getAll方法要执行的SQL
@Select("select * from users")
public List<User> getAll();
}

需要说明的是,我们不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。

2.然后在mybatis-config.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>
<!--配置数据库环境,可以有多个environment,default值是其中一个environment的id值-->
<environments default="developement">
<environment id="developement">
<!--配置事务管理器,JDBC和MANAGED两种,JDBC可以进行回滚和提交-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源,type=[UNPOOLED | POOLED| JNDI], POOLED表示实现简单的数据池连接,连接可以复用-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</dataSource>
</environment>
</environments>
<!--resource值是映射文件所在的路径-->
<!--class值是映射接口类所在的路径-->
<mappers>
<mapper resource="mapping/userMapper.xml"></mapper>
<mapper class="me.gacl.map.UserMapperI"></mapper>
</mappers>
</configuration>

3.编写测试类,代码如下:

package me.gacl.domain;

import me.gacl.Util.MyBatisUtil;
import me.gacl.map.UserMapperI;
import org.apache.ibatis.session.SqlSession;
import java.util.List; /**
* Created by huyanxia on 2017/8/26.
*/
public class TestCRUDByAnnotation {
public void testAdd(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI userMapperI = sqlSession.getMapper(UserMapperI.class);
//要插入的user对象
User user = new User();
user.setName("我是注解");
user.setAge(12);
//执行插入操作
int resultAdd = userMapperI.add(user);
//手动提交
//sqlSession.commit();
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(resultAdd);
}
public void testUpdate(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI userMapperI = sqlSession.getMapper(UserMapperI.class);
//要更新的user对象
User user = new User();
user.setName("劳斯莱斯了");
user.setAge(2);
user.setId(5);
//执行更新操作
int resultAdd = userMapperI.update(user);
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(resultAdd);
}
public void testDelete(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI userMapperI = sqlSession.getMapper(UserMapperI.class);
//执行删除操作
int resultAdd = userMapperI.delete(4);
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(resultAdd);
}
public void testGetAll(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI userMapperI = sqlSession.getMapper(UserMapperI.class);
//执行查询全部操作
List<User> list = userMapperI.getAll();
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(list);
} public static void main(String[] args) {
TestCRUDByAnnotation testCRUDByAnnotation = new TestCRUDByAnnotation();
testCRUDByAnnotation.testAdd();
//testCRUDByAnnotation.testUpdate();
//testCRUDByAnnotation.testDelete();
//testCRUDByAnnotation.testGetAll();
}
}

执行结果如下:

插入操作

更新操作

删除操作

查询全部

4.其中用到的MybatisUtil类是自己编写的,用来获取SqlSession

 package me.gacl.Util;

 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.Reader; /**
* 获取SqlSession
*/
public class MyBatisUtil {
public static SqlSession getSqlSession(boolean autoCommit){
String resource = "mybatis-config.xml";
try{
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession(autoCommit);
return sqlSession;
}catch (IOException e){
e.printStackTrace();
}
return null;
}
}

mybatis学习(二)----对表进行CRUD操作的更多相关文章

  1. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  2. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  3. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  4. Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】

    一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...

  5. MyBatis学习笔记(二)——使用MyBatis对表执行CRUD操作

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4262895.html 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用My ...

  6. 二:MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  7. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

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

  8. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  9. MyBatis学习总结_02_使用MyBatis对表执行CRUD操作

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

随机推荐

  1. Agile敏捷开发Planning Poker简介

    ​​关注嘉为科技,获取运维新知 一.为什么不用“人天”? 传统的IT项目,尤其是软件开发项目,往往使用“人天”来作为工作量评估的量词.甚至是代表一种评估方式.在软件项目开发经典著作<人月神话&g ...

  2. Android Studio 一直卡在building解决办法

    1.随便找一个你能运行的as项目 2.打开gradle-wrapper.properties,文件目录:项目/gradle/wrapper/gradle-wrapper.properties 3.复制 ...

  3. 【洛谷p2822】组合数问题

    (突然想          ??忘掉了wdt) (行吧那就%%%hmr) 组合数问题[传送门] (因为清明要出去培训数学知识所以一直在做数论) 组合数<=>杨辉三角形(从wz那拐来的技能 ...

  4. 各种排序算法(java)

    /** * 时间复杂度:O(n*n) * 简单选择排序法:每次从剩余元素中选择一个最小值,交换最小值与数组中相应位置上的数值 * n趟 * @param nums */ public static v ...

  5. windows远程以及文件共享方法总结

    文件共享部分 紧接着下一步[允许使用空密码] 参考这个链接 https://jingyan.baidu.com/article/7f766dafa8c5ee4100e1d071.html 在我们使用w ...

  6. img标签设置默认图片

    为了美观当网页图片不存在时不显示叉叉图片 当在页面显示的时候,万一图片被移动了位置或者丢失的话,将会在页面显示一个带X的图片,很是影响用户的体验.即使使用alt属性给出了”图片XX”的提示信息,也起不 ...

  7. WDA基础九:BusinessGraphics

    好像很少有人用这玩意...好难玩,好废...和ABAP的那个图一样废.... 很多报表都是用BO,BI什么做的,不仅废,而且很多BO顾问不懂代码,写出来的报表挫的要死.... WDA的网页图形报表分析 ...

  8. Ping 的TTL理解

    http://www.webkaka.com/tutorial/zhanzhang/2017/061570/ 根据自己的扩展重新整理了一下,虽然不是运维,想了解一点东西就希望了解清楚. 一.含义 “T ...

  9. 《高性能SQL调优精要与案例解析》——10.4_SQL语句改写部分文档

    应各位读者要求,现将<高性能SQL调优精要与案例解析>中<10.4 SQL语句改写>部分整理成电子文档,上传至群共享文件(群号:298176197): 或者通过如下链接下载: ...

  10. 深入浅出php socket编程

    对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.什么是TCP/IP.UDP?2.Socket在哪里呢?3.Socket是什么 ...