带你快速入门一直那么火的_Mybatis技术(一)
Mybatis
Mybatis-入门
1.简述
- 为什么学Mybatis?
帮程序员更加简单进行数据库增删改查的操作。
- 持久层框架,用来编写DAO;
- 对JDBC进行了封装,即底层依赖JDBC;
2. 入门案例
需求说明:
需要使用Mybatis,让Java可以操作MySQL数据库。
查询到Java中,List<User>
(1)环境搭建
1、先创建数据库和数据表
2、创建JavaSE项目
3、导入jar包 & 导入 核心配置文件SqlMapConfig.xml
4、创建包:
5、定义JavaBean
User类‘???????
public class User implements Serializable {
private Integer uid;
private String username;
private Date birthday;
private String sex;
private String address;//get/set/有参/无参/toString
}
注意:
表名要和JavaBean类名保持一致
表中的字段和JavaBean的成员变量名保持一致
6、定义Dao接口 & 在SqlMapConfig.xml中注册Dao接口
7、定义测试类
(2)代码实现
test层(service层)
/**
* 使用mybatis,操作MySQL数据库
* 读取User表中所有的数据,打印控制台
*/
@Test
public void run1() throws IOException {
//1、加载核心配置文件(org.apache.ibatis.io)
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、读取核心配置文件,创建一个工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3、工厂开启会话
SqlSession session = factory.openSession();
//4、通过会话,获取Dao对象
UserDao dao = session.getMapper(UserDao.class);
//5、调用Dao方法,操作数据库,返回结果集
List<User> ulist = dao.selectAll();
System.out.println(ulist);
//6、会话关闭
session.close();
}
UserDao:
public interface UserDao {
@Select("select * from user;")
List<User> selectAll();
}
(3)问题集锦
3.Mybatis增删改查
(1)模糊查询(单条件)
查询username中,包含’ao’的字符串
select * from user where username like ‘%ao%’;
测试类:
/**
* 模糊查询:
* 查询用户名包含 ao 的所有数据,并展示控制台
*/
@Test
public void run2() throws IOException {
//1、加载核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建一个工厂,读取配置文件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3、工厂开启一个会话
SqlSession session = factory.openSession();
//4、通过会话,获取Dao对象
UserDao dao = session.getMapper(UserDao.class);
//5、调用Dao方法
List<User> ulist = dao.selectUlistByParam("%ao%");
System.out.println(ulist);
//6、会话关闭
session.close();
}
UserDao:
@Select("select * from user where username like #{username};")
List<User> selectUlistByParam(@Param("username") String username);
(2)模糊查询(多条件)
需求: 寻找username中包含 ‘ao’ ,并且 性别为’女’
select * from user where username like ‘%ao%‘ and sex=‘女‘;
方式一:
测试类:
/**
* 多条件模糊查询
* 需求: 寻找username中包含 ‘ao’ ,并且 性别为’女’
*/
@Test
public void run3() throws IOException {
//1、加载核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建工厂读取核心配置文件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3、通过工厂开启会话
SqlSession session = factory.openSession();
//4、通过会话获取Dao对象
UserDao dao = session.getMapper(UserDao.class);
//5、Dao调用方法
List<User> ulist = dao.selectUlistByParam2("%ao%","女");
System.out.println(ulist);
//6、会话关闭
session.close();
}
UserDao
@Select("select * from user where username like #{username} and sex=#{sex};")
List<User> selectUlistByParam2(@Param("username") String s, @Param("sex") String sex);
方式二:
@Test
public void run3() throws IOException {
//1、加载核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建工厂读取核心配置文件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3、通过工厂开启会话
SqlSession session = factory.openSession();
//4、通过会话获取Dao对象
UserDao dao = session.getMapper(UserDao.class);
//5、Dao调用方法
//方式二
User user = new User();
user.setUsername("%ao%");
user.setSex("女");
List<User> ulist = dao.selectUlistByParam3(user);
System.out.println(ulist);
//6、会话关闭
session.close();
}
UserDao:
@Select("select * from user where username like #{username} and sex=#{sex};")
List<User> selectUlistByParam3(User user);
(3)插入一条数据
测试类:
/**
* 插入一条数据
*/
@Test
public void run4() throws IOException {
//1、加载核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建工厂,读取配置文件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3、通过工厂开启会话
SqlSession session = factory.openSession();
//4、通过会话获取Dao对象
UserDao dao = session.getMapper(UserDao.class);
//5、调用Dao方法
User user = new User(5, "小a", new Date(), "男", "潘多拉");
//int就是添加了几条数据
int row = dao.insert(user);
System.out.println(row);
//6、先提交会话,再关闭会话
session.commit();
session.close();
}
UserDao
@Insert("insert into user values (#{uid},#{username},#{birthday},#{sex},#{address})")
int insert(User user);
小结:
- 增删改,需要保存数据库的,必须commit;
- 增删改,数据需要还原的,可以rollback;
(4) Dao使用参数总结
1、参数为:JavaBean类型,SQL语句上写#{属性名}
2、参数为:其他类型,每个参数前必加@Param(“参数名”),对应SQL语句中#{参数名}
(5)删除数据
需求:删除id=4的数据
测试类:
/**
* 删除一条数据
*/
@Test
public void run5() throws IOException {
//1、加载核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建工厂,读取配置文件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3、通过工厂开启会话
SqlSession session = factory.openSession();
//4、通过会话获取Dao对象
UserDao dao = session.getMapper(UserDao.class);
//5、调用Dao方法
//int就是删除了几条数据
int row = dao.delete(4);
System.out.println(row);
//6、先提交会话,再关闭会话
session.commit();
session.close();
}
UserDao:
@Delete("delete from user where uid=#{uid}")
int delete(@Param("uid") int i);
(6)更新数据
修改数据: id=5的数据,改为“小66”
update user set username=‘小66‘ where id=5;
测试类:
/**
* 修改一条数据
*/
@Test
public void run6() throws IOException {
//1、加载核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建工厂,读取配置文件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3、通过工厂开启会话
SqlSession session = factory.openSession();
//4、通过会话获取Dao对象
UserDao dao = session.getMapper(UserDao.class);
//5、调用Dao方法
//int就是修改了几条数据
int row = dao.modify("小66",5);
System.out.println(row);
//6、先提交会话,再关闭会话
session.commit();
session.close();
}
UserDao:
@Update("update user set username=#{username} where uid=#{uid};")
int modify(@Param("username") String username, @Param("uid") int i);
Mybatis增删改查总结
@Select(“”) 用于执行查询语句
@Insert(“”) 用于执行insert语句,commit提交
@Update(“”) 用于执行update语句,commit提交
@Delete(“”) 用于执行delete语句,commit提交
参数赋值时:https://www.cnblogs.com/shuaqbi/
SQL语句上: User对象, #{username} 本质:getUsername()
SQL语句上: @Param(“uid”) String u #{uid}