案例源码地址: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文件
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
com.mc
Java
1.0-SNAPSHOT
三、案例
项目结构
编写sqlMapConfig.xml文件
<?xml version="1.0" encoding="UTF-8"?> 编写mapper.xml <?xml version="1.0" encoding="UTF-8" ?> 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<Account> selectList = session.selectList("selectLike", "j"); session.close(); System.out.println(selectList); } mapper.xml <select id="selectLike" resultType="com.jdbc.Account"> select * from account where name like "%
:这个也是用来做占位符,带有字符串连接功能,常用语模糊查询案例:模糊查询@TestpublicvoidselectLike()//查询name带′小′的List<Account>selectList=session.selectList("selectLike","j");session.close();System.out.println(selectList);mapper.xml<selectid="selectLike"resultType="com.jdbc.Account">select∗fromaccountwherenamelike"{value}%"
五、自增主键获取