0x00 前言
续上篇文章的入门篇,继续mark Mybatis内容,上一章节只是写了Mybatis的一个简单查询功能,这篇来写他的删改查等其他操作。
0x01 Mybatis增加大法
添加的操作和查询的其实都差别不大,修改一下映射文件,然后从查询的基础上修改一下,就成了增加的功能了,具体看代码:
<?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="com.test.dao.Userdao">
<select id="findAll" resultType="com.test.domain.User">
select * from user
</select>
<insert id="SaveUser" parameterType="com.test.domain.User">
insert into user(name,address,gender,age,qq,email,username,password) values(#{name},#{address},#{gender},#{age},#{qq},#{email},#{username},#{password})
</insert >
</mapper>
从select标签下面,增加一个insert 标签。
test类:
package com.test;
import com.test.dao.Userdao;
import com.test.domain.User;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class mybatistest {
@Test
public void selecttest()throws Exception{
// public static void main(String[] args) {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("mapconfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
Userdao userDao = session.getMapper(Userdao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user.toString());
}
//6.释放资源
session.close();
in.close();
}
@Test
public void Savetest() throws IOException {
User user = new User();
user.setName("nice");
user.setAge(20);
user.setGender("男");
user.setAddress("gd");
user.setQq("1402773304");
user.setEmail("1402773304@qq.com");
user.setUsername("nice0e3");
user.setPassword("nize");
InputStream in = Resources.getResourceAsStream("mapconfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
Userdao userDao = session.getMapper(Userdao.class);
userDao.SaveUser(user); //调用SaveUser方法参数user对象
session.commit();//提交事务
}
}
在这里面分别有2个方法,一个是查询,一个是添加。虽然说功能完成了,但是这里可以看到前面的一些代码都是重复的,我们可以直接把他重复的代码封装起来,想要执行某一个功能的时候直接调用就可以了。
package com.test;
import com.test.dao.Userdao;
import com.test.domain.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class mybatistest {
private InputStream in;
private SqlSessionFactoryBuilder builder;
private Userdao userDao;
private SqlSession session;
private SqlSessionFactory factory;
private User user = new User();
@Before //被注解后在测试方法执行前会执行
public void init() throws IOException {
in = Resources.getResourceAsStream("mapconfig.xml");
builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
session = factory.openSession();
session.commit();//提交事务
userDao = session.getMapper(Userdao.class);
}
@Test
public void selecttest()throws Exception{
// public static void main(String[] args) {
//1.读取配置文件
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user.toString());
}
//6.释放资源
}
@Test
public void Savetest() throws IOException {
user.setName("nice");
user.setAge(20);
user.setGender("男");
user.setAddress("gd");
user.setQq("1402773304");
user.setEmail("1402773304@qq.com");
user.setUsername("nice0e3");
user.setPassword("nize");
userDao.SaveUser(user);
}
public void Update(){
}
@After //测试方法执行后执行
public void destroy() throws IOException {
session.close();
in.close();
}
}
把配置的信息放正在init方法里面,运行时候自动运行,进行赋值。
关闭资源的放到destroy方法里面,关闭的时候自动执行关闭资源。
封装完成后,我们的Savetest的方法除了设置值外,其实也就一行代码就完成了改功能。
调试好了前面的后面的就好写了,基本上就是复制粘贴。
0x02 Mybatis修改大法
前面的框架大体定义好后,在来写个修改的操作。
userdao接口添加updata方法:
void UpdataUser(User user);
映射文件添加updata标签:
<update id="UpdataUser" parameterType="com.test.domain.User">
update user set username = #{username},address=#{address},age=#{age} where id=#{id}
</update>
基于上面的代码添加一个方法:
@Test
public void Update(){
user.setUsername("nnicee0e3");
user.setAddress("dgd");
user.setAge(18);
user.setId(8);
userDao.UpdataUser(user);
}
运行后内容成功被修改。
0x03 Mybatis delete大法
至于删除的操作就更简单了。
userdao接口中添加一个方法:
void deleteUser(Integer id);
映射文件添加delete标签:
<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{id}
</delete>
test类里面依旧复制粘贴一下代码:
@Test
public void delete() {
userDao.deleteUser(6);
}
0x04 Mybatis 查询单条信息
一如既往的接口添加方法:
List<User> findone(Integer id);
一如既往的添加映射文件内容:
<select id="findone" resultType="com.test.domain.User" parameterType="int">
select * from user where id =#{id}
</select>
一如既往的test类里面调用方法:
@Test
public void findone(){
List<User> findone = userDao.findone(1);
System.out.println(findone.toString());
}
0x05 Mybatis 模糊查询大法
接口添加方法:
List<User> findlike(String name);
添加映射文件内容:
<select id="findlike" resultType="com.test.domain.User" parameterType="string">
select * from user where name like #{name}
</select>
test类里面调用方法:
@Test
public void findlike(){
List<User> ming = userDao.findlike("%xiao%");
for (User user1 : ming) {
System.out.println(user1);
}
}
0x06 结尾
只要会用了基本的增删改查和定义sql语句后,其他的只要会复制粘贴就行。