Mybatis基础学习与重点

开始了新项目的旅程,首先学习了java中的新后端框架Mybatis,一点一点个大家分享,今天给大家分享一下Mybatis的基础。
我们以前在后端连接的是JDBC,但是它有一些缺点:
(1)数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能。如果使用数据库连接池可解决此问题。
(2)Sql语句在代码中硬编码,造成代码不易维护,实际应用中sql变化的可能较大,sql变动需要改变java代码。
(3)使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。
(4)对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。
在java中引入了Mybatis,下面来看一下Mybatis的架构
在这里插入图片描述
大家可以根据上图来分析和对比JDBC

Mybatis的特点:
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper接口开发需要遵循以下规范:
1、Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

下面是Mybatis入门
3.1、根据id查询用户
创建POJO:

package com.long.pojo;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getSex() {
    return sex;
}
public void setSex(String sex) {
    this.sex = sex;
}
public Date getBirthday() {
    return birthday;
}
public void setBirthday(Date birthday) {
    this.birthday = birthday;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}
@Override
public String toString() {
    return "User [id=" + id + ", username=" + username + ", sex=" + sex
            + ", birthday=" + birthday + ", address=" + address + "]";
}

创建核心配置文件:
SqlMapConfig.xml是mybatis核心配置文件,配置文件内容为数据源、事务管理。

<?xml version="1.0" encoding="UTF-8" ?>

sql映射文件User.xml:

<?xml version="1.0" encoding="UTF-8" ?> select * from user where id = #{v}

创建测试文件:

public class MybatisFirstTest {
@Test
public void testMybatis() throws Exception {
//加载核心配置文件
String resource = “sqlMapConfig.xml”;
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

    //执行Sql语句 
    User user = sqlSession.selectOne("test.findUserById", 10);

    System.out.println(user);
}

}

3.2、实现根据用户名模糊查询用户
SQL语句如下:

SELECT * FROM user WHERE username LIKE ‘%王%’
1
User.xml里面加入这个:

<select id="findUserByUsername" parameterType="String" resultType="com.long.pojo.User">
    elect * from user where username like '%${value}%'
</select>

测试代码:

@Test
public void testfindUserByUsername() throws Exception {
//加载核心配置文件
String resource = “sqlMapConfig.xml”;
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

    //执行Sql语句 
    List<User> users = sqlSession.selectList("test.findUserByUsername", "五");
    for (User user2 : users) {
        System.out.println(user2);
    }
}

3.3、实现添加用户
User.xml:

<insert id="insertUser" parameterType="com.pojo.pojo.User">
    <selectKey keyProperty="id" resultType="Integer" order="AFTER">
        select LAST_INSERT_ID()
    </selectKey>
    insert into user (username,birthday,address,sex) 
    values (#{username},#{birthday},#{address},#{sex})
</insert>

测试程序:

//添加用户
@Test
public void testInsertUser() throws Exception {
//加载核心配置文件
String resource = “sqlMapConfig.xml”;
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

    //执行Sql语句 
    User user = new User();
    user.setUsername("龙");
    user.setBirthday(new Date());
    user.setAddress("sadfsafsafs");
    user.setSex("男");
    int i = sqlSession.insert("test.insertUser", user);
    sqlSession.commit();
}

3.4、mysql自增主键返回
User.xml:

SELECT LAST_INSERT_ID() INSERT INTO `user` (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})

测试程序:

//添加用户
@Test
public void testInsertUser() throws Exception {
//加载核心配置文件
String resource = “sqlMapConfig.xml”;
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

    //执行Sql语句 
    User user = new User();
    user.setUsername("龙");
    user.setBirthday(new Date());
    user.setAddress("sadfsafsafs");
    user.setSex("男");
    int i = sqlSession.insert("test.insertUser", user);
    sqlSession.commit();
    System.out.println(user.getId());
}

3.5、更新用户
User.xml:

update user set username = #{username},sex = #{sex},birthday = #{birthday},address = #{address} where id = #{id}

测试程序:

//更新用户
@Test
public void testUpdateUserById() throws Exception {
//加载核心配置文件
String resource = “sqlMapConfig.xml”;
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

    //执行Sql语句 
    User user = new User();
    user.setId(29);
    user.setUsername("雏田");
    user.setBirthday(new Date());
    user.setAddress("222222sadfsafsafs");
    user.setSex("女");
    int i = sqlSession.update("test.updateUserById", user);
    sqlSession.commit();
}

3.6、删除用户
User.xml:

<delete id="deleteUserById" parameterType="Integer">
    delete from user 
    where id = #{vvvvv}
</delete>

测试程序:

//删除
@Test
public void testDelete() throws Exception {
//加载核心配置文件
String resource = “sqlMapConfig.xml”;
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

    sqlSession.delete("test.deleteUserById", 29);
    sqlSession.commit();
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值