本例子包含了对数据库表简单的增删改查的操作,并且包含事物。该例子只适用于MySQL数据库。该例子需要手动创建数据库以及数据库表

例子中所需要的jar包,详查MyBatis---简介

一个entity类Student.java:这个类包含一个无参的构造函数,以及所有属性的getset方法

private static final long serialVersionUID = 2257468553009291835L;

private int id;
private String name;
private int age; public Student() { } public Student(String name, int age) {
  super();
  this.name = name;
} public int getId() {
  return id;
}
public void setId(int id) {
  this.id = id;
} public String getName() {
  return name;
} public void setName(String name) {
  this.name = name;
} public int getAge() {
  return age;
} public void setAge(int age) {
  this.age = age;
}

一个MyBatis配置文件MyBatisConfig.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> <!-- 为entity类创建别名 -->
<typeAliases>
<typeAlias alias="Student" type="com.studyMyBatis.entity.Student"/>
</typeAliases> <!-- 数据库配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" /><!-- 设置事物采用JDBC处理方式,另一种处理方式为MANAGED -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/jsp_db"/>
<property name="username" value="root"/>
<property name="password" value="Lfq,909475"/>
</dataSource>
</environment>
</environments> <!-- 关联mappers,每一个entity类都应有一个对应的mapper.xml文件,该文件用于存放操作数据库语句,相当于将sql保存到配置文件中,java直接调用即可 -->
<mappers>
<mapper resource="com/studyMyBatis/map/student.xml" />
</mappers> </configuration>

输出日志信息配置log4j.properties:该配置文件中设置sql显示级别为DEBUG,显示在控制台中

log4j.rootLogger=DEBUG, Console  

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

一个与entity类Student.java对应的mapper文件student.xml:文件中所有的#{值}应与传过来的对象中的属性名称或HashMap中键的名称相同。如:#{name},那么传过来的Student中就必须有name属性,或传过来的HashMap中有键为name的值

<?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="/"> <!-- 添加成功,会返回插入数据的主键id到student对象中。但需要数据库支持主键id自增长,比如oracle就不能返回 -->
<insert id="insertStudent" parameterType="Student"
statementType="PREPARED" keyProperty="studentId" useGeneratedKeys="true">
insert into
Student (name,age) values(#{name},#{age})
</insert> <update id="updateStudentById" parameterType="Student">
update student set
name=#{name}, age=#{age} where studentId = #{studentId}
</update> <delete id="deleteStudentById" parameterType="Student">
delete from student
where studentId = #{studentId}
</delete> <select id="getStudentById" parameterType="int" resultType="Student">
select *
from student where studentId=#{studentId}
</select> <select id="getStudentByEntity" parameterType="Student"
resultType="Student">
select *
from student where studentId=#{studentId}
</select> <select id="getStudentByNameAndAge" parameterType="hashmap"
resultType="Student">
select *
from student where name=#{name} and age=#{age}
</select> <select id="getStudentResultHashMapById" parameterType="int"
resultType="hashmap">
select *
from student where studentId=#{studentId}
</select> <select id="getAllStudents" resultType="Student">
select * from student
</select> <resultMap type="Student" id="StudentMap">
<id property="studentId" column="studentId" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
<select id="getStudent" parameterType="int" resultMap="StudentMap">
select *
from student where studentId=#{studentId}
</select>

</mapper>

一个测试类

public class Test {

    public static void main(String[] args) {

        Reader reader = null;
SqlSession sqlSession = null;
try {
String resoutce = "com/studyMyBatis/map/MyBatisConfig.xml";
reader = Resources.getResourceAsReader(resoutce);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
sqlSession = sqlSessionFactory.openSession(false);//参数设置是否自动提交,默认false(相当于事物管理)
new Test().insertStudent(sqlSession);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
if (sqlSession != null) {
sqlSession.rollback();
}
} finally {
if (sqlSession != null) {
sqlSession.close();
}
} } /** 添加一条数据
* @param sqlSession
* @return 返回插入的这条数据的主键id
*/
public int insertStudent(SqlSession sqlSession) {
Student student = new Student("王五", 24);
sqlSession.insert("insertStudent", student);
return student.getId();
} /** 根据id修改一条数据
* @param sqlSession
*/
public void updateStudentById(SqlSession sqlSession) {
Student student = new Student("张三改", 24);
student.setId(3);
sqlSession.update("updateStudentById", student);
} /** 根据id删除一条数据
* @param sqlSession
*/
public void deleteStudentById(SqlSession sqlSession) {
Student student = new Student();
student.setId(4);
sqlSession.delete("deleteStudentById", student);
} /** 根据id查询一条Student记录
* @param sqlSession
* @param studentId Student.id
* @return
*/
public Student getStudentById(SqlSession sqlSession, int studentId) {
return sqlSession.selectOne("getStudentById", studentId);
} /** 根据Student对象查询一条Student记录
* @param sqlSession
* @param student 该对象中至少应包括查询语句中的条件字段的值
* @return
*/
public Student getStudentByEntity(SqlSession sqlSession, Student student) {
return sqlSession.selectOne("getStudentByEntity", student);
} /** 根据一个HashMap查询一条Student记录
* @param sqlSession
* @return
*/
public Student getStudentByNameAndAge(SqlSession sqlSession, HashMap<String, Object> hashMap) {
return sqlSession.selectOne("getStudentByNameAndAge", hashMap);
} /** 根据id查询一条Student记录
* @param sqlSession
* @param studentId Student.id
* @return
*/
public HashMap<String, Object> getStudentResultHashMapById(SqlSession sqlSession, int studentId) {
return sqlSession.selectOne("getStudentResultHashMapById", studentId);
} /** 查询所有的Student记录
* @param sqlSession
* @return List<Student>
*/
public List<Student> getAllStudents(SqlSession sqlSession){
return sqlSession.selectList("getAllStudents");
} /*-------------------------------------------------------------------------------------------------------------------------*
*---------------------------------------以上是设置参数属性为parameterType-------------------------------------------------*
*------------------------------------查询多条记录设置参数与查询一条记录相同-----------------------------------------------*
*--------------------返回值数据类型也可是一个HashMap,即设置resultType属性即可,一般用于联合查询--------------------------*
*------------------------resultMap就不写java代码了,在xml中最后有介绍,其它用法都差不多-----------------------------------*
*-------------------------------------------------------------------------------------------------------------------------*/ }

查询语句<select>标签的属性描述

属性 描述
id 在命名空间中唯一的标识符,可以被用来引用这条语句
parameterType 将会传入这条语句的参数类的完全限定名或别名或一个hashmap
parameterMap 这是引用外部parameterMap的已经被废弃的方法。适用内联参数映射和parameterType属性
resultType 从这条语句中返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不是集合。使用resultType或resultMap,但不能同时使用
resultMap 命名引用外部的resultMap。返回map是MyBatis最具力量的特性,对其有一个很好的理解的话,许多复杂映射的情形就能被解决了。使用resultMap或resultType,但不能同时使用
flushCache 将其设置为true,不论语句什么时候被调用,都会导致缓存被清空。默认值为false
useCache 将其设置为true,将会导致本条语句的结果被缓存。默认值为true
timeout 这个设置驱动程序等待数据库返回请求结果,并抛出异常事件的最大等待之。默认不设置(驱动自行处理)
fetchSize 这是暗示驱动程序每次批量返回的结果行数。默认不设置(驱动自行处理)
statementType STATEMENT,PREPARED或CALLABLE的一种。这会让MyBatis使用选择使用Statement,preparedStatement或CallableStatement,默认值:PREPARED
resultSetType FORWAARE_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。默认不设置(驱动自行处理)

MyBatis---简单增删改查的带事物的例子的更多相关文章

  1. Mybatis的简单增删改查

    刚开始学习Mybatis可以先看下官方文档,MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集.MyBat ...

  2. Mybatis实现简单增删改查

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

  3. MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

    一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.D ...

  4. ado.net的简单数据库操作(三)——简单增删改查的实际应用

    果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...

  5. Redis:五种数据类型的简单增删改查

    Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...

  6. 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

  7. 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作

    一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...

  8. MyBatis之二:简单增删改查

    这一篇在上一篇的基础上简单讲解如何进行增删改查操作. 一.在mybatis的配置文件conf.xml中注册xml与注解映射 <!-- 注册映射文件 --> <mappers> ...

  9. idea+spring4+springmvc+mybatis+maven实现简单增删改查CRUD

    在学习spring4+springmvc+mybatis的ssm框架,idea整合简单实现增删改查功能,在这里记录一下. 原文在这里:https://my.oschina.net/finchxu/bl ...

随机推荐

  1. lunix重启service network restart错误Job for network.service failed. See 'system 或Failed to start LSB: Bring

    1.mac地址不对 通过ip addr查看mac地址,然后修改cd /etc/sysconfig/network-scripts/目录下的文件里面的mac地址 2.通过以下方法 systemctl s ...

  2. Struts2_Action和Result总结

    Action 1.实现一个Actiond的最常用方式:从ActionSupport继承2.DMI动态方法调用3.通配符配置 *{1}{2}... a) *_*4.接收参数的方法(一般用属性或者Doma ...

  3. centos系统下安装Nginx

    参考链接 CentOS 7 用 yum 安装 Nginx Nginx负载均衡配置 下载并安装 #使用以下命令 sudo yum install -y nginx #sudo表示使用管理员权限运行命令 ...

  4. Python基础学习-列表基本操作

     列表:Python的“苦力”.   列表不同于元组和字条串的地方:列表是可变的——可以改变列表的内容,并且列表有很多有用的.专门的方法. 1.list函数 因为字符串不能像列表一样被修改,所有有时根 ...

  5. mouse事件在JQ中的应用(在动画与交互中用得比较多).

    mousedown与mouseup事件 用户交互操作中,最简单直接的操作就是点击操作,因此jQuery提供了一个mousedown的快捷方法可以监听用户鼠标按下的操作,与其对应的还有一个方法mouse ...

  6. SAP成都研究院飞机哥: SAP C4C中国本地化之微信聊天机器人的集成

    今天的文章仍然来自Jerry的老同事,SAP成都研究院的张航(Zhang Harry).关于他的背景介绍,请参考张航之前的文章:SAP成都研究院飞机哥:程序猿和飞机的不解之缘.下面是他的正文. 大家好 ...

  7. Uva 11401 数三角形

    题目链接:https://uva.onlinejudge.org/external/114/11401.pdf 题意:1~n个数里面挑3个不同的数,组成一个三角形.求方案数. 分析: 令最长的边为X, ...

  8. 问题 D: C++ 习题 输出日期时间--友元函数

    题目描述 设计一个日期类和时间类,编写display函数用于显示日期和时间.要求:display函数作为类外的普通函数,分别在Time和Date类中将display声明为友元函数.在主函数中调用dis ...

  9. 创建 XXXXXXXX 的配置节处理程序时出错: 请求失败

    今天碰到这个错误,之前的程序在测试的时候都没有问题,同样的程序打包通过QQ传给其他人,在XP下测试也没有问题,我的Win7系统从QQ信箱下载压缩包,解压之后执行程序就会出问题,本来还是考虑自己程序是不 ...

  10. Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple Task Points

    Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple ...