带你快速入门一直那么火的_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}  

猜你喜欢

转载自www.cnblogs.com/xiaocaocaohahaha/p/12728602.html