mybatis学习01
文章目录
1 项目配置
1.1 创建项目
新建maven quickstart项目mybatis20210226
1.2 导入mysql和mybatis依赖
在pom.xml文件内导入mysql和mybatis依赖
<!--mybatis框架包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.5</version>
</dependency>
1.3 补齐可能用到的目录
1.4 在resources目录下导入mybatis.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>
<typeAlias type="com.fk.pojo.Dept" alias="Dept"/>
<typeAlias type="com.fk.pojo.User" alias="User"/>
</typeAliases>
<!-- 配置数据源环境 -->
<environments default="development">
<environment id="development">
<!-- 数据库事务管理类型 -->
<transactionManager type="JDBC"/>
<!-- 数据源,type=pooled 说明是使用连接池方式,可以节省资源 -->
<dataSource type="POOLED">
<!-- 调用资源文件里的用户信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis20210226?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
configuration标签内引入sql映射文件
<!--引入sql映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
<mapper resource="mappers/DeptMapper.xml"/>
<mapper resource="mappers/OrderMapper.xml"/>
<!--<mapper resource="mappers/*.xml"></mapper>-->
</mappers>
2 创建数据库和表
2.1 新建数据库mybatis20210226
2.2 创建tb_user表
创建如下属性
2.3 创建tb_dept表
创建如下属性
2.4 创建tb_order表
创建如下属性
3 mybatis基本操作
3.1 准备工作
3.1.1 创建3个类
pojo包里创建3个类如下属性,进行生成get、set、toString方法,接下来用到
User类
package com.fk.pojo;
public class User {
private Integer id;
private String name;
private String address;
private Integer state;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
", state=" + state +
'}';
}
}
Dept类
package com.fk.pojo;
/*
* 对应tb_dept
* */
public class Dept {
private Integer id;
private String deptName;
private Integer deptPerson;
private Integer deptSalry;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public Integer getDeptPerson() {
return deptPerson;
}
public void setDeptPerson(Integer deptPerson) {
this.deptPerson = deptPerson;
}
public Integer getDeptSalry() {
return deptSalry;
}
public void setDeptSalry(Integer deptSalry) {
this.deptSalry = deptSalry;
}
@Override
public String toString() {
return "Dept{" +
"id=" + id +
", deptName='" + deptName + '\'' +
", deptPerson=" + deptPerson +
", deptSalry=" + deptSalry +
'}';
}
}
Order类
package com.fk.pojo;
public class Order {
private Integer id;
private String orderName;
private Integer price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", orderName='" + orderName + '\'' +
", price=" + price +
'}';
}
}
3.1.2 mappers目录下mapper.xml文件基本格式
<?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">
<!-- 映射文件,存放SQL
namespace是映射文件的唯一标志
-->
<mapper namespace=" ">
<!--中间放置SQL标签和语句-->
</mapper>
3.2 UserMapper.xml内
namespace为h
<!-- 映射文件,存放SQL
namespace是映射文件的唯一标志
-->
<mapper namespace="h">
3.2.1 插入
3.2.1.1 UserMapper.xml内SQL语句
<!--向user表输入数据
parameterType参数类型
mybatis的表达式#{}
#{name}调用User对象中的getName()方法
-->
<insert id="insertUser" parameterType="com.fk.pojo.User">
insert into tb_user(id,name,address,state)
values (null,#{name},#{address},#{state})
</insert>
3.2.1.2 测试
在test如下目录下新建TestMybatis测试类
测试:
@Test
public void t1() throws IOException {
//加载mybatis的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
//
SqlSession session = build.openSession();
//准备参数
User user = new User();
user.setName("张三");
user.setAddress("如皋");
user.setState(1);
//通过session对象执行sql
int row = session.insert("h.insertUser",user);
//提交事务
session.commit();//手动提交事务
if(row>0){
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
//释放资源
session.close();
}
3.2.2 修改
3.2.2.1 UserMapper.xml内SQL语句
<!--根据id修改-->
<update id="updateUserById" parameterType="com.fk.pojo.User">
update tb_user set name =#{name},addres=#{addres},state=#{state} where id =#{id}
</update>
3.2.2.2 测试
TestMybatis测试类测试:
//修改数据
@Test
public void t2() throws IOException {
//加载mybatis的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession对象
SqlSession session = build.openSession(true);
User user1 = new User();
user1.setName("李四");
user1.setAddress("北京");
user1.setState(0);
user1.setId(3);
int row = session.update("h.updateUserById", user1);
if (row > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
//释放资源
session.close();
}
3.2.3 删除
3.2.3.1 UserMapper.xml内SQL语句
<!--根据id删除数据
当传入的参数是一个的时候,本且这个参数不是对象类型的,比如是String Integer类型,
parameterType属性可以不写,也可以写成parameterType="java.lang.Integer"
-->
<delete id="deleteUserById" parameterType="java.lang.Integer">
delete from tb_user where id=#{uid}
</delete>
3.2.3.2 测试
TestMybatis测试类测试:
//根据id删除数据
@Test
public void t3() throws IOException {
//加载mybatis的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession对象
SqlSession session = build.openSession(true);
Integer a = 3;
int row = session.delete("h.deleteUserById", a);
if (row > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
//释放资源
session.close();
}
}
3.2.4 查询
3.2.4.1 UserMapper.xml内SQL语句
<!--查询表数据
resultType 每条数据封装给哪个对象
parameterType 因为没有传参数,可不写-->
<select id="findAll" resultType="com.fk.pojo.User">
select * from tb_user
</select>
3.2.4.2 测试
TestMybatis测试类测试:
//查询所有数据
@Test
public void t4() throws IOException {
//加载mybatis的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession对象
SqlSession session = build.openSession();
List<User> list = session.selectList("h.findAll");
//遍历
for(User u:list){
System.out.println(u);
}
//释放
session.close();
}
3.2.5 修改
3.2.5.1 UserMapper.xml内SQL语句
3.2.5.2 测试
TestMybatis测试类测试:
3.2.6 修改
3.2.6.1 UserMapper.xml内SQL语句
3.2.6.2 测试
TestMybatis测试类测试:
3.3 DeptMapper.xml内
namespace为dept
<!-- 映射文件,存放SQL
namespace是映射文件的唯一标志
-->
<mapper namespace="dept">
3.3.1 查询tb_dept表的所有数据
3.3.1.1 DeptMapper.xml内SQL语句
<!--对于表与对象属性不规则映射的字段,可是使用该字段的别名
名别与对象的属性一致即可
as 可不写-->
<!--加入resultType传入的参数是对象的时候,可以通过配置别名的方式简化 类全路径的写法
目前需要在mybaits的核心配置文件配置-->
<select id="findAll" resultType="Dept">
select id,deptName,deptPerson,deptSalry from tb_dept
</select>
3.3.1.2 测试
TestMybatis测试类测试:
//查询tb_dept表的所有数据
@Test
public void t5() throws IOException {
//加载mybatis的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession对象
SqlSession session = build.openSession();
List<Dept> list = session.selectList("dept.findAll");
for (Dept d:list){
System.out.println(d);
}
//关闭资源
session.close();
}
3.3.2 修改
3.3.2.1 DeptMapper.xml内SQL语句
3.3.2.2 测试
TestMybatis测试类测试:
3.4 OrderMapper.xml内
namespace为com.fk.mapper.OrderMapper
<!-- 映射文件,存放SQL
namespace是映射文件的唯一标志
-->
<mapper namespace="com.fk.mapper.OrderMapper">
3.4.1 查询tb_order表的所有数据
3.4.1.1 OrderMapper.xml内SQL语句
<!-- /* 1、Mapper接口方法 名和mapper. xmI中定义sqI的id值相同
2、Mapper接口方法接收的参数 类型和mapper. xml中定义的sq1的parameterType的类 型相同
3、Mapper接口方法的返 回值类型和mapper. xml中定义的sq1的resultType的类型相同*/
如何知道当前sql的id resultType parameterType是于哪个接口方式对应
namespace的属性值就是于当前sql 对应的接口的全路径
-->
<select id="findAllOrders" resultType="com.fk.pojo.Order">
select * from tb_order
</select>
3.4.1.2 测试
TestMybatis测试类测试:
//mapper接口测试
@Test
public void t8() throws IOException {
//加载mybatis的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession对象
SqlSession session = build.openSession(true);
//获取接口的代理实现类
OrderMapper mapper = session.getMapper(OrderMapper.class);
List<Order> list = mapper.findAllOrders();
for (Order o:list){
System.out.println(o);
}
//释放
session.close();
}
3.4.2 根据id删除tb_order表中数据
3.4.2.1 OrderMapper.xml内SQL语句
<!--int deleteOrderById(Integer id)
当传入的参数是一个的时候, 并且这个参数不是对象类型的,比如是String Integer 类型,
parameterType这个属性可以不写也可以写 parameterType= "java. lang. Integer
操作增删改的时候resultType 不能写
-->
<delete id="deleteOrderById" parameterType="java.lang.Integer">
delete from tb_order where id=#{uid}
</delete>
3.4.2.2 测试
TestMybatis测试类测试:
//mapper接口测试
@Test
public void t9() throws IOException {
//加载mybatis的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession对象
SqlSession session = build.openSession(true);
//获取接口的代理实现类
OrderMapper mapper = session.getMapper(OrderMapper.class);
int row = mapper.deleteOrderById(2);
if (row>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
//释放
session.close();
}