mybatis修改mysql变量_Java通过MyBatis框架对MySQL数据进行增删查改的基本方法

本文介绍了如何使用MyBatis框架对MySQL数据进行基本的增删查改操作,包括单个记录和一组记录的查询、新增用户、更新用户信息以及删除用户的方法,并涉及到联表查询和复合对象的处理。
摘要由CSDN通过智能技术生成

1. 查询

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

IUserMapper接口添加下面方法:

List getUsers(String name);

在User.xml中添加:

select * from `user` where name like #{name}

测试方法:

@Test

public void queryListTest() {

SqlSession session = sqlSessionFactory.openSession();

try {

IUserMapper mapper = session.getMapper(IUserMapper.class);

List 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 getArticlesByUserId(int id);

(4) 在User.xml中添加:

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}

(5)测试方法:

@Test

public void getArticlesByUserIdTest() {

SqlSession session = sqlSessionFactory.openSession();

try {

IUserMapper mapper = session.getMapper(IUserMapper.class);

List articles = mapper.getArticlesByUserId(1);

for (Article article : articles) {

log.info("{} - {}, author: {}", article.getTitle(), article.getContent(), article.getUser().getName());

}

} finally {

session.close();

}

}

附:

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

2. 新增

IUserMapper接口添加下面方法:

int addUser(User user);

User.xml添加:

insert into user(name,age,address) values(#{name},#{age},#{address})

测试方法:

@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 `user` set name=#{name}, age=#{age}, address=#{address}

where id=#{id}

测试方法:

@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 from `user` where id=#{id}

测试方法:

@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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值