您的位置:首页 > 其它

Mybatis实现增删改查、模糊查询、多条件查询

2018-09-13 20:10 274 查看
版权声明:原创文章,转载请说明出处 https://blog.csdn.net/Destiny_strive/article/details/82693706

项目总体结构如下:

数据库准备:在 数据库dbmybatis中创建一张category的表,我录入了几条记录方便测试,表字段结构如下图:

1.建立好了表后使用idea新建一个Maven项目,pom.xml加入如下依赖:

<dependencies>
<!--数据库连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>

<!--配置编译源代码的jdk版本-->
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

2.resources下创建mybatis的配置文件mybatis-config.xml。

设置别名是为了在具体的mapper.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>
<typeAliases> <!--设置别名-->
<package name="com.byh.pojo"/>
</typeAliases>
<!--连接数据库-->
<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/dbmybatis?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!--扫描mapper文件-->
<mappers>
<mapper resource="mapper/CategoryMapper.xml"/>
</mappers>

</configuration>

3.创建实体Category.java。

package com.byh.pojo;

public class Category {

private int id;
private String 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;
}

@Override
public String toString() {
return "Category{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}

4.创建CategoryMapper.xml.其中编写了对category表的增删改查、模糊、多条件查询的语句。

注意:namespace的值是自己项目中所对应的mapper.java接口。一定不能写错。

<?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.byh.mapper.CategoryMapper">

<insert id="addCategory" parameterType="Category" >
insert into category ( name ) values (#{name})
</insert>
<delete id="delCategory" parameterType="Category" >
delete from category where id= #{id}
</delete>
<update id="updateCategory" parameterType="Category" >
update category set name=#{name} where id=#{id}
</update>
<select id="getCategory" parameterType="_int" resultType="Category">
select * from  category  where id= #{id}
</select>
<select id="listCategory" resultType="Category">
select * from category
</select>

<select id="listCategoryByName"  parameterType="string" resultType="Category">
select * from   category  where name like concat('%',#{0},'%')
</select>
<select id="listCategoryByIdAndName"  parameterType="map" resultType="Category">
select * from   category  where id > #{id}  and name like concat('%',#{name},'%')
</select>

</mapper>

5.然后写对应的接口CategoryMapper 。

这里接口中的方法有如下规定:

(1)方法名和对应的mapper配置文件中查询语句的id相同

(2)返回类型和resultType的类型一致,没有就是void。

(3)方法中的参数列表中的类型和parameterType一致。

(4)mapper配置文件的namespace对应mapper接口类的全路径。

package com.byh.mapper;

import com.byh.pojo.Category;

import java.util.List;
import java.util.Map;

public interface CategoryMapper {

void addCategory(Category category);

void delCategory(Category category);

void updateCategory(Category category);

void getCategoryById(int id);

List<Category> listCategory();

List<Category> listCategoryByName(String name);

List<Category> listCategoryByIdAndName(Map<String,Object> map);

}

6.创建测试。下面贴出了完整的增删改查、模糊、多条件查询的测试通过的代码:

import com.byh.mapper.CategoryMapper;
import com.byh.pojo.Category;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo1 {

private SqlSession session ;
private CategoryMapper categoryMapper;
@Before
public void bef() throws IOException {
//mybatis的配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//构建sqlSession的工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建能执行映射文件中sql的sqlSession
session=sqlSessionFactory.openSession();
categoryMapper = session.getMapper(CategoryMapper.class);
}

/**
* 关闭SqlSession的方法
* @param session
*/
public void close(SqlSession session){
session.commit();
session.close();
}
/*
1. 程序向找Mybatis找数据
2. mybatis从数据库中:
(1).通过mybatis-config.xml 定位是哪个数据库,
(2).通过Category.xml执行对应的select语句
(3).基于Category.xml把返回的数据库记录封装在Category对象中
(4).把多个Category对象装在一个Category集合中
这样找到数据
3. 返回一个Category集合
*/
@Test  //查询所有
public void findAll() throws IOException {
List<Category> cs=categoryMapper.listCategory();
for (Category c : cs) {
System.out.println(c.getName());
}
}
@Test //增加
public void add() throws IOException {
Category c = new Category();
c.setName("我是新增的分类");
categoryMapper.addCategory(c);
findAll();
//提交和关闭,调用自定义方法
close(session);
}
@Test //删除
public void del() throws IOException {
findAll();
System.out.println("------------删除后-----------");
Category c = new Category();
c.setId(5);
categoryMapper.delCategory(c);//这里的5是一个数据库存在的id
findAll();
close(session);
}
@Test //更新
public void update() throws IOException {
findAll();
System.out.println("------------更新后-----------");
Category c = session.selectOne("getCategory",2);//查询单个对象
c.setName("分类2被修改了a");
categoryMapper.updateCategory(c);

findAll();
close(session);
}
@Test //模糊查询
public void like() throws IOException {
findAll();
System.out.println("------------模糊查询-----------");
//返回符合条件的结果集
List<Category> cs=categoryMapper.listCategoryByName("了");
for (Category c : cs) {
System.out.println(c.getName());
}
}
@Test //多条件
public void moreLike() throws IOException {
findAll();
//这里查询的是id大于1并且分类的name中带有数字2的记录,为了直观,建议数据库多录入几条数据测试
Map<String,Object> params = new HashMap<>();
params.put("id", 1);
params.put("name", "2");
List<Category> cs = categoryMapper.listCategoryByIdAndName(params);
System.out.println("------------多条件-----------");
for (Category c : cs) {
System.out.println(c.getName());
}
}

}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: