项目总体结构如下:
数据库准备:在 数据库dbmybatis中创建一张category的表,我录入了几条记录方便测试,表字段结构如下图:
1.建立好了表后使用idea新建一个Maven项目,pom.xml加入如下依赖:
mysql mysql-connector-java 5.1.46 org.mybatis mybatis 3.3.0 junit junit 4.12 maven-compiler-plugin 1.8
2.resources下创建mybatis的配置文件mybatis-config.xml。
设置别名是为了在具体的mapper.xml中不用写实体的完整路径。只需要写类名,且不区分大小写。
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接口。一定不能写错。
insert into category ( name ) values (#{name}) delete from category where id= #{id} update category set name=#{name} where id=#{id}
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); ListlistCategory(); List listCategoryByName(String name); List listCategoryByIdAndName(Map 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 { Listcs=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 cs=categoryMapper.listCategoryByName("了"); for (Category c : cs) { System.out.println(c.getName()); } } @Test //多条件 public void moreLike() throws IOException { findAll(); //这里查询的是id大于1并且分类的name中带有数字2的记录,为了直观,建议数据库多录入几条数据测试 Map params = new HashMap<>(); params.put("id", 1); params.put("name", "2"); List cs = categoryMapper.listCategoryByIdAndName(params); System.out.println("------------多条件-----------"); for (Category c : cs) { System.out.println(c.getName()); } } }