MyBatis对表的增删改查操作

        主要有两种方式:基于XML实现和基于注解实现。

完整项目结构:

工具类:MyBatisUtil-------用于获取  sqlsession

 package me.gacl.test;

 import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { /**
* 获取SqlSessionFactory
* @return SqlSessionFactory
*/ public static SqlSessionFactory getSqlSessionFactory(){
String resource = "conf.xml";
InputStream is = MyBatisUtil.class.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
} /**
* 获取SqlSession
* @return SqlSesstion
* @throws
*/
public static SqlSession getSqlSession(){
return getSqlSessionFactory().openSession();
} /**
* 获取SqlSession
* @param isAutoCommit
* true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
* @return SqlSession
*/
public static SqlSession getSqlSession(boolean isAutoCommit){
return getSqlSessionFactory().openSession(isAutoCommit);
}
}

  一、基于XML实现:(新建方法)

          思路总结:

在 userMapper.xml 文件中进行增删改查实现,

在测试类中映射xml文件中的sql(包名.文件名前缀.方法id): String statement = "me.gacl.mapping.userMapper.addUser";

当新增成功,返回的retResult为1:int retResult = sqlSession.insert(statement,user);

代码实现:

           conf.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="liyangkun123" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource = "me/gacl/mapping/userMapper.xml" ></mapper>
</mappers> </configuration>

         数据库驱动:<property name="driver" value="com.mysql.jdbc.Driver" />       

         <mapper   />==<mapper></mapper>

        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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)--> <mapper namespace="me.gacl.mapping.userMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复使用parameterType属性指明查询时
使用的参数类型,resultType属性指明查询返回的结果集类型resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类--> <!-- 根据id查询得到一个user对象 -->
<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> <!-- 修改用户(Update) -->
<update id="updateUser" parameterType="me.gacl.domain.User">
update users set name=#{name},age=#{age} where id=#{id}
</update> <!-- 删除用户(Delete) -->
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete> <!-- 查询所有用户 -->
<select id="getAllUsers" resultType="me.gacl.domain.User">
insert * from users
</select> </mapper>

           测试类:TestCRUDByXmlMapper----单元测试验证

 package me.gacl.test;

 import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import me.gacl.domain.User; public class TestCRUDByXmlMapper { @Test
public void testAdd(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
String statement = "me.gacl.mapping.userMapper.addUser";
User user = new User();
user.setName("用户孤傲苍狼");
user.setAge(20); int retResult = sqlSession.insert(statement, user);
sqlSession.close();
System.out.println(retResult);
} @Test
public void testUpdate(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
String statement = "me.gacl.mapping.userMapper.updateUser";
User user = new User();
user.setId(2);
user.setName("zhu");
user.setAge(25); int retResult = sqlSession.update(statement, user);
sqlSession.close();
System.out.println(retResult);
} @Test
public void testdeleteUser(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
String statement = "me.gacl.mapping.userMapper.deleteUser"; int retResult =sqlSession.delete(statement,1);
sqlSession.close();
System.out.println(retResult);
}
}

SqlSession sqlSession = MyBatisUtil.getSqlSession(true);//获取session(内有链接数据库的配置),连上数据库,才能进行操作。

   二、基于注解实现:(新建方法)

写一个接口类定义sql映射,并且我们不用写接口实现,而是由MyBatis动态构建,我们只需要直接拿来使用即可。

接下来将接口类注册到配置文件中(conf.xml) :

借鉴大神代码:

<!-- 注册UserMapper映射接口-->
          <mapper class="me.gacl.mapping.UserMapperI"/>

下一步测试类测试:

注意在新增之前要获得 sqlsession并且open,操作之后要close。

创建接口实例,

获取操作对象,修改操作信息

然后调用增删改查方法执行(借用大神代码)

代码实现:

         UserMapper.java----增删改查接口

 package me.gacl.mapping;

 import java.util.List;

 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 me.gacl.domain.User; public interface UserMapperI { @Insert("insert into users(name,age) value(#{name},#{age})")
public int add(User user); @Delete("delete from users where id=#{id}")
public int deleteById(int id); @Select("select * from users where id=#{id}")
public User selectById(int id); @Update("update users set name=#{name},age=#{age} where id=#{id}")
public int updateById(User user); @Select("select * from users")
public List<User> getAll();
}

         注册到conf.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>
<!-- 引用db.properties配置文件 -->
<properties resource="me/gacl/test/db.properties" /> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="liyangkun123" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource = "me/gacl/mapping/userMapper.xml" ></mapper>
<mapper class="me.gacl.mapping.UserMapperI" />
</mappers> </configuration>

         resource和class为包+名完整路径          

        TestCRUDByAnnotationMapper.java------测试类

 package me.gacl.test;

 import java.util.List;

 import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import me.gacl.domain.User;
import me.gacl.mapping.UserMapperI;
import me.gacl.test.MyBatisUtil; public class TestCRUDByAnnotationMapper { @Test
public void testAdd(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
User user = new User();
user.setName("用户xdp");
user.setAge(29);
int add = mapper.add(user); sqlSession.close();
System.out.println(add);
} @Test
public void testDelete(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
int delete = mapper.deleteById(1);
sqlSession.close();
System.out.println(delete);
} @Test
public void testUpdate(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
User user = new User();
user.setId(2);
user.setName("Linda");
user.setAge(23); int update = mapper.updateById(user);
sqlSession.close();
System.out.println(update);
} @Test
public void testSelect(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
User user = mapper.selectById(2);
sqlSession.close();
System.out.println(user); } @Test
public void testSelectAll(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
List<User> user = mapper.getAll(); sqlSession.close();
System.out.println(user); }
}

注意事项:MyBatisUtil.java,conf.xml, 放到 util 包中时,调用出错,放到同一个包中,没有问题。

大神总结链接:http://www.cnblogs.com/xdp-gacl/p/4262895.html

学习大神笔记之“MyBatis学习总结(二)”的更多相关文章

  1. 学习大神笔记之 “MyBatis学习总结(一)”

    1.准备工作 软件:eclipse. mysql .navicat for mysql 包:mybatis-3.1.1.jar   mysql-connector-java-5.1.7-bin.jar ...

  2. 学习大神笔记之“MyBatis学习总结(三)”

    一.连接数据库的配置单独放在一个properties文件中          创建db.peoperties----保存数据库配置信息      driver=com.mysql.jdbc.Drive ...

  3. 设计模式--单例模式(学习Learning hard大神笔记实践)

    根据大神博客园中的文章,自己亲手敲了一遍,对每个解说点都自己动手进行实践,收获颇丰,谢谢Learning hard大神,原文地址http://www.cnblogs.com/zhili/p/Desig ...

  4. Spring学习笔记:Spring整合Mybatis学习PPT(三:整合思路)

    三.Spring-Mybatis的整合思路

  5. Mybatis学习笔记导航

    Mybatis小白快速入门 简介 本人是一个Java学习者,最近才开始在博客园上分享自己的学习经验,同时帮助那些想要学习的uu们,相关学习视频在小破站的狂神说,狂神真的是我学习到现在觉得最GAN的老师 ...

  6. (原创)mybatis学习一,夯实基础

    一,what?(是什么) MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...

  7. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

  8. Mybatis学习笔记一

    Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为M ...

  9. Mybatis学习笔记之一(环境搭建和入门案例介绍)

    一.Mybatis概述 1.1 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了go ...

随机推荐

  1. 泛型(Generics)

    Framework类库中的泛型 泛型可以使代码重用,提高开发效率 CLR允许在引用类型.值类型或接口中定义泛型方法: CLR允许创建泛型引用类型.泛型值类型(枚举不允许创建).泛型委托类型和泛型接口类 ...

  2. iOS面试题集锦

    一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.怎样防止指针的越界使用问题? 答案: 1 .防止数组越界,必须让指针指向一个有效的内存地址, 2. 防止向一块内存中拷 ...

  3. 记一SQL部署问题

    在部署环境时,不同的环境可能会有一些不同步,而个人遇到的问题就是在开发环境中表中均有字段 BestCaseId 和 RiskId 字段,生产环境中目前只有 BestCaseId 字段,新搭建的测试环境 ...

  4. Jsonp跨域访问

    很早之前看过好几篇跨域访问的文章,然后做项目的时候基本没有遇到跨域访问的问题.不过该来的还是会来,前些天终于让我遇到了.于是重温了一下原理这些,再进行实战.于是现在也敢通过实战后的一些理解来和大家分享 ...

  5. java良好的编码习惯

    1. 尽量在合适的场合使用单例   使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步 ...

  6. JVM-String比较-字节码分析

    一道String字符串比较问题引发的字节码分析 public class a { public static void main(String[] args)throws Exception{ } p ...

  7. ABP Migration(数据库迁移)

    今天准备说说EntityFramework 6.0+,它与我之前所学的4.0有所区别,自从4.1发布以来,code first 被许多人所钟爱,Dbcontext API也由此时而生.早在学校的时候就 ...

  8. PHP 小数点保留两位

    最近在做统计这一块内容,接触关于数字的数据比较多, 用到了三个函数来是 数字保留小数后 N 位: 接下来简单的介绍一下三个函数: 1.number_format echo number_format( ...

  9. node-inspector调试工具应用

    一.起因 想调试某些开源的nodejs项目,然后就选择了node-inspector插件. 他的优点: 1.可以借用chrome或firefox浏览器进行调试,与前端调试融合. 2.配置简单 二.必备 ...

  10. github指令

    一般用法 git stash git pull git stash pop 结局冲突 git add . git commit -m "message" git push 查看 g ...