案例源码地址:https://download.csdn.net/download/gj_user/12236230
SqlMapConfig.xml:mybatis的核心配置文件,主要用于配置数据库连接等一些信息
Mappers.xml:这些配置文件有多个,每一个配置文件对应数据库当中的一张表,主要用于我们数据库中的字段与我们JavaBean实体类中的字段的相互映射,mappers.xml一定要被sqlMapConfig.xml加载
SqlSessionFactory:工厂类,主要用于产生我们的sqlSession
SqlSession:mybatis里面的一个核心的类,用于操作我们的数据库,通过executor来操作我们的数据库,executor是mybaits里面一个封装的对象,不需要我们去处理
MappedStatement:主要作用就是连接我们的输入映射与我们的输出映射,将我们的输入映射拿到之后,去执行我们数据库操作,然后将执行后的结果包装成我们的输出映射
二、案例
创建表sql
CREATE TABLE account
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(11) NOT NULL COMMENT ‘姓名’,
money
double(32) NOT NULL COMMENT ‘金额’,
PRIMARY KEY (id
)
) ENGINE=Inno
使用Maven构建项目
添加pom文件
4.0.0
com.mc
Java
1.0-SNAPSHOT
三、案例
项目结构
编写sqlMapConfig.xml文件
编写mapper.xml select * from account where id = #{id} javabean;类 public class Account { private int id; private String name; private double money;public Account() {
// TODO Auto-generated constructor stub
}
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;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
public String toString() {
return “Account [id=” + id + “, name=” + name + “, money=” + money + “]”;
}
}
测试类
@Test
public void select() throws IOException {
SqlSessionFactoryBuilder b =new SqlSessionFactoryBuilder();
SqlSessionFactory factory=b.build(Resources.getResourceAsStream(“sqlMapConfig.xml”));
SqlSession session = factory.openSession();
Account one = session.selectOne(“select”,1);
System.out.println(one);
}
结果
DEBUG [main] - ==> Preparing: select * from account where id = ?
DEBUG [main] - > Parameters: 1(Integer)
DEBUG [main] - < Total: 1
Account [id=1, name=小明, money=11000.0]
避免重复代码太多可以使用@before注解在每次进行单元测试的时候调用一些重复的初始话代码
SqlSession session;
@Before
public void init() throws IOException {
SqlSessionFactoryBuilder b = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = b.build(Resources.getResourceAsStream(“sqlMapConfig.xml”));
session = factory.openSession();
}
增删改查CRUD
mapper.xml
@Test
public void selectALL() {
//查询name带’小’的
List selectList = session.selectList(“selectall”);
session.close();
System.out.println(selectList);
}
@Test
public void insert() {
Account a=new Account();
a.setName(“jason”);
a.setMoney(1234);
session.insert(“insert”, a);
session.commit();
session.close();
}
@Test
public void update() {
Account a=new Account();
a.setId(2);
a.setMoney(1111);
a.setName(“张三”);
session.update(“update”, a);
session.commit();
session.close();
}
@Test
public void delete() {
Account a=new Account();
a.setId(3);
session.update(“delete”, a);
session.commit();
session.close();
}
}
四、 #{}与${}
#{} :这个用来做我们的占位符,不带字符串连接功能
: 这 个 也 是 用 来 做 占 位 符 , 带 有 字 符 串 连 接 功 能 , 常 用 语 模 糊 查 询 案 例 : 模 糊 查 询 @ T e s t p u b l i c v o i d s e l e c t L i k e ( ) / / 查 询 n a m e 带 ′ 小 ′ 的 L i s t < A c c o u n t > s e l e c t L i s t = s e s s i o n . s e l e c t L i s t ( " s e l e c t L i k e " , " j " ) ; s e s s i o n . c l o s e ( ) ; S y s t e m . o u t . p r i n t l n ( s e l e c t L i s t ) ; m a p p e r . x m l < s e l e c t i d = " s e l e c t L i k e " r e s u l t T y p e = " c o m . j d b c . A c c o u n t " > s e l e c t ∗ f r o m a c c o u n t w h e r e n a m e l i k e " {}:这个也是用来做占位符,带有字符串连接功能,常用语模糊查询 案例:模糊查询 @Test public void selectLike() { //查询name带'小'的 List
五、自增主键获取