Java通过MyBatis框架对MySQL数据进行增删查改的基本方法

1. 查询

除了单条记录的查询,这里我们来尝试查询一组记录。

IUserMapper接口添加下面方法:

List<User> getUsers(String name);

在User.xml中添加:

<resultMap type="User" id="userList"><!-- type为返回列表元素的类全名或别名 -->
  <id column="id" property="id" />
  <result column="name" property="name" />
  <result column="age" property="age" />
  <result column="address" property="address" />
</resultMap> 

<select id="getUsers" parameterType="string" resultMap="userList"><!-- resultMap为上面定义的User列表 -->
  select * from `user` where name like #{name}
</select>

测试方法:

@Test
public void queryListTest() {
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    List<User> users = mapper.getUsers("%a%"); // %在sql里代表任意个字符。
    for (User user : users) {
      log.info("{}: {}", user.getName(), user.getAddress());
    }
  } finally {
    session.close();
  }
}

如果联表查询,返回的是复合对象,需要用association关键字来处理。
如User发表Article,每个用户可以发表多个Article,他们之间是一对多的关系。

(1) 创建Article表,并插入测试数据:

-- Drop the table if exists
DROP TABLE IF EXISTS `Article`; 

-- Create a table named 'Article'
CREATE TABLE `Article` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` int NOT NULL,
  `title` varchar(100) NOT NULL,
  `content` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

-- Add several test records
INSERT INTO `article`
VALUES
('1', '1', 'title1', 'content1'),
('2', '1', 'title2', 'content2'),
('3', '1', 'title3', 'content3'),
('4', '1', 'title4', 'content4');

(2) com.john.hbatis.model.Article类:

public class Article {
  private int id;
  private User user;
  private String title;
  private String content;
  // Getters and setters are omitted
}

(3) 在IUserMapper中添加:

List<Article> getArticlesByUserId(int id);

(4) 在User.xml中添加:

<resultMap type="com.john.hbatis.model.Article" id="articleList">
  <id column="a_id" property="id" />
  <result column="title" property="title" />
  <result column="content" property="content" /> 

  <association property="user" javaType="User"><!-- user属性映射到User类 -->
    <id column="id" property="id" />
    <result column="name" property="name" />
    <result column="address" property="address" />
  </association>
</resultMap> 

<select id="getArticlesByUserId" parameterType="int" resultMap="articleList">
  select u.id, u.name, u.age, u.address, a.id a_id, a.title, a.content
  from article a
  inner join user u
  on a.user_id=u.id and u.id=#{id}
</select>

(5)测试方法:

@Test
public void getArticlesByUserIdTest() {
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    List<Article> articles = mapper.getArticlesByUserId(1);
    for (Article article : articles) {
      log.info("{} - {}, author: {}", article.getTitle(), article.getContent(), article.getUser().getName());
    }
  } finally {
    session.close();
  }
}

附:
除了在association标签内定义字段和属性的映射外,还可以重用User的resultMap:

<association property="user" javaType="User" resultMap="userList" />

2. 新增

IUserMapper接口添加下面方法:

int addUser(User user);

User.xml添加:

<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"><!-- useGeneratedKeys指定myBatis使用数据库自动生成的主键,并填充到keyProperty指定的属性上。如果未指定,返回对象拿不到生成的值 -->
  insert into user(name,age,address) values(#{name},#{age},#{address})
</insert>

测试方法:

@Test
public void addUserTest() {
  User user = new User("Lucy", 102, "Happy District");
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    int affectedCount = mapper.addUser(user);
    session.commit(); // 默认为不自动提交。调用session.getConnection().getAutoCommit()查看
    log.info("{} new record was inserted successfully whose id: {}", affectedCount, user.getId());
  } finally {
    session.close();
  }
}

3. 更新

接口添加方法:

int updateUser(User user);

User.xml添加:

<update id="updateUser" parameterType="User">
  update `user` set name=#{name}, age=#{age}, address=#{address}
  where id=#{id}
</update>

测试方法:

@Test
public void updateUserTest() {
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    User user = mapper.getUserById(8);
    user.setAddress("Satisfied District");
    int affectedCount = mapper.updateUser(user); // 除了要修改的属性外,user的其它属性也要赋值,否则这些属性会被数据库更新为初始值(null或0等),可以先查询一次,但这样会增加和数据库不必要的交互。后面的条件判断能避免此问题。
    log.info("Affected count: {}", affectedCount);
    session.commit();
  } finally {
    session.close();
  }
} 

 4. 删除

接口添加方法:

int deleteUser(int id);

User.xml添加:

<delete id="deleteUser" parameterType="int">
  delete from `user` where id=#{id}
</delete>

测试方法:

@Test
public void deleteUserTest() {
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    int affectedCount = mapper.deleteUser(8);
    log.info("Affected count: {}", affectedCount);
    session.commit();
  } finally {
    session.close();
  }
}
(0)

相关推荐

  • java jdbc连接mysql数据库实现增删改查操作

    jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的时候才能更好的去理解这些成熟的框架是如何去实现增删改查

  • 实例讲解Java的MyBatis框架对MySQL中数据的关联查询

    mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映射到定义的Java Bean 中.下面通过一个实例,来展示一下Mybatis对于常见的一对多和多对一关系复杂映射是怎样处理的. 设计一个简单的博客系统,一个用户可以开多个博客,在博客中可以发表文章,允许发表评论,可以为文章加标签.博客系统主要有以下几张表构成: Author表:作者信息表,记录作者的信息,用户名和密码,邮箱等. Blog表   :  博客表,一个作者可以开多个博客,即Author和Blog的关系是一对多.

  • Java mysql数据库并进行内容查询实例代码

    Java  mysql数据库并进行内容查询 最近用框架做了几个项目,感觉当初底层的东西有点忘了,写一个JDBC的简单的连接代码来熟悉回顾一下,也希望对刚接触的新手能有所帮助.这也是我的第一篇随笔,废话不多说,直接上代码: public Connection getCon() { //数据库连接名称 String username="root"; //数据库连接密码 String password=""; String driver="com.mysql.j

  • Java+Mysql学生管理系统源码

    最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事.闲来无事,也就自己写了一个,不过功能实现的不是很多. 开发语言:java: 开发环境:Mysql, java: 开发工具:eclipse 开发此案例,首先得在电脑上有java开发环境和Mysql, java开发环境与Mysql的搭建,就不再叙述了,如果需要,请联系我最下面的联系方式:dingyelf@aliyun.com 此次系统比较简易:数据库中只有一个表:stu;功能:能够对学生增加.删除.修改. 开发步骤:  

  • Java数据库连接池的几种配置方法(以MySQL数据库为例)

    一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1.方法一:在WebRoot下面建文件夹META-INF,里面建一个文件context.xml,如下: <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/chaoshi" auth="

  • 如何在Java程序中访问mysql数据库中的数据并进行简单的操作

    在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文. 创建一个javaProject,并输入如下java代码: package link; import java.sql.*; /** * 使用JDBC连接数据库MySQL的过程 * DataBase:fuck, table:person: * 使用myeclipse对mysql数据库进行增删改查的基本操作. */ public

  • Java+Spring+MySql环境中安装和配置MyBatis的教程

    1.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介       MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获.MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型.Map 接口和POJO 到数据库记录.相对Hibernate和Apache OJB等"一站式"ORM解决方案而言,Mybatis 是一种"半自动化"的O

  • Java数据类型与MySql数据类型对照表

    本文讲述了Java数据类型与MySql数据类型对照表.分享给大家供大家参考,具体如下: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNE

  • Java通过MyBatis框架对MySQL数据进行增删查改的基本方法

    1. 查询 除了单条记录的查询,这里我们来尝试查询一组记录. IUserMapper接口添加下面方法: List<User> getUsers(String name); 在User.xml中添加: <resultMap type="User" id="userList"><!-- type为返回列表元素的类全名或别名 --> <id column="id" property="id"

  • Python操作mysql数据库实现增删查改功能的方法

    本文实例讲述了Python操作mysql数据库实现增删查改功能的方法.分享给大家供大家参考,具体如下: #coding=utf-8 import MySQLdb class Mysql_Oper: def __init__(self,host,user,passwd,db): self.host=host self.user=user self.passwd=passwd self.database=db def db_connecet(self): try: #连接 conn=MySQLdb.

  • mybatis实现对数据的增删查改实例详解

    前期准备 新建java工程或java wweb工程,需要导入以下的包, 基本工作已经完成,接下来开始进入正题. 新建实体类 新建与数据库表对应的实体类 package com.edu.hpu.domain; /** * @author Administrator *user表所对应的实体类 */ public class User { //实体类的属性和表的字段名称一一对应 private int id; private String name; private int age; //对属性进行

  • Java操作Mongodb数据库实现数据的增删查改功能示例

    本文实例讲述了Java操作Mongodb数据库实现数据的增删查改功能.分享给大家供大家参考,具体如下: 首先,我们在windows下安装mongodb数据库,安装教程可查看前面一篇文章:http://www.jb51.net/article/85605.htm 代码如下: package io.mogo; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.mongodb.BasicDBObj

  • Java操作redis实现增删查改功能的方法示例

    本文实例讲述了Java操作redis实现增删查改功能的方法.分享给大家供大家参考,具体如下: 首先,我们需要在windows下配置一个redis环境,具体配置教程请看:http://www.jb51.net/article/96230.htm 然后需要导入:jedis-2.7.3.jar这个包,看如下代码: package redis.main; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; imp

  • 利用Java的MyBatis框架获取MySQL中插入记录时的自增主键

    第一步: 在Mybatis Mapper文件中添加属性"useGeneratedKeys"和"keyProperty",其中keyProperty是Java对象的属性名! <insert id="insert" parameterType="Spares" useGeneratedKeys="true" keyProperty="id"> insert into spares

  • JDBC如何访问MySQL数据库,并增删查改

    导入驱动包,加载具体的驱动类 导包: 新建一个Java Project文件,在此文件夹下新建Folder文件命名lib(此文件夹下放一些导入的包) 将mysql-connector-java-xxxx.jar拖进来,右键Build Path→Add to Build Path:(这里我用的是mysql-connector-java-8.0.20.jar) 加载具体的驱动类: Class.forName("com.mysql.cj.jdbc.Driver"); 与数据库建立连接conne

  • 解析Extjs与php数据交互(增删查改)

    复制代码 代码如下: <html><head>//搜索暂时没做,数据是出来了,但是却没法显示<link rel="stylesheet" type="text/css" href="./js/resources/css/ext-all.css"/><script type="text/javascript" src="./js/jquery.js"></

  • Java使用MyBatis框架分页的5种方式

    本文为大家分享了Java使用MyBatis框架分页的五种方式,供大家参考,具体内容如下 初始准备 1.创建分页对象类,方便模块间传值 //PageInfo.java import lombok.Data; @Data public class PageInfo { private int pageNo; private int pageSize; } 2.定义DAO层接口 import org.apache.ibatis.session.RowBounds; import org.springf

随机推荐