Mybatis-简单复习(使用步骤+CRUD)

Mybatis 使用步骤

  1. 导包
  2. 创建 Mybatis-config.xml 配置文件
  3. 编写 MybatisUtils
  4. 创建 实体类
  5. 创建 Mapper 接口
  6. 创建 Mapper接口映射文件
  7. 测试

使用步骤详解

导包

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

Mybatis-config

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/kuang/dao/userMapper.xml"/>
    </mappers>
</configuration>

Mybatis-util

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
        // 读取配置文件
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
        // 创建 SqlSessionFactory
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取SqlSession连接
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

User 实体类

// 有参构造
@AllArgsConstructor
// 无参构造
@NoArgsConstructor
public class User {
    private int id;  //id
    private String name;   //姓名
    private String pwd;   //密码
    //set/get
    //toString()
}

Mapper 接口类

import com.kuang.pojo.User;
import java.util.List;
public interface UserMapper {
    List<User> selectUser();
}

映射文件

  • 需要跟Mapper接口的文件名相对应
  • namespace 十分重要,不能写错!
  • 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!
<?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">
<!-- 对应文件的 Mapper -->
<mapper namespace="com.kuang.dao.UserMapper">
  <select id="selectUser" resultType="com.kuang.pojo.User">
    select * from user
  </select>
</mapper>

使用

public class MyTest {
    @Test
    public void selectUser() {
        SqlSession session = MybatisUtils.getSession();
        //方法一:
        //List<User> users = session.selectList("com.kuang.mapper.UserMapper.selectUser");
        //方法二:
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> users = mapper.selectUser();
        for (User user: users){
            System.out.println(user);
        }
        // 注意关闭 session
        session.close();
    }
}

Maven静态资源过滤问题

<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
    </resource>
</resources>

CRUD-Mybatis操作方法

Select 方法

参数
  • id
    • 命名空间唯一的标识符
    • 接口中的方法名与映射文件中的SQL语句ID相对应
  • parameterType
    • 传入参数的类型
  • resultType
    • 返回参数的类型,一般对应实体类
需求练习:根据id查询用户
UserMapper
public interface UserMapper(){
	public User selectUserById(int id);
}
UserMapper.xml
<select id = "selectUserById" resultType = "com.xiaocheng.pojo.User">
	select * from users where id = #{id}
</select>
MyTest
@Test
public void Test1(){
	SqlSession sqlSession = MybatisUtils.getSession();
	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
	User user = mapper.selectUserById(1);
	System.out.println(user);
	session.close;
}
需求练习:根据密码和名字来查询用户
方法1:

直接在方法中传递参数

User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);

在接口方法的参数前加 @Param 属性Sql 语句编写的时候,直接取 @Param 中设置的值即可,不需要单独设置参数类型。

方法2:

使用万能的Map

User selectUserByNP2(Map<String,Object> map);

编写Sql的时候,需要传递参数类型,参数类型为map

<select id = "selectUserByNP2" parameterType = "map" resultType = "com.kuang.pojo.User">
	select * from user where name = #{username} and pwd = #{pwd}
</select>

使用时,key的取值为Sql取值即可,没有顺序要求

Map<String,Object> map = new HashMap<String,Object>();
map.put("username","小明");
map.put("pwd","123456");
User user = map.selectUserByNP2(map);
总结:

如果参数过多,使用HashMap。如果参数很少,直接使用@Param直接传递参数即可

Insert

需求:给数据库添加一个用户
步骤:
  1. 在UserMapper 接口中添加对应的方法
int addUser(User user);
  1. 在UserMapper.xml 中添加映射语句
<insert id = "addUser" parameterType = "com.kuang.pojo.User">
	insert into user (id,name,pwd) values(#{id},#{name},#{pwd})
</insert>
  1. 测试
@Test
public void testAddUser(){
	SqlSession session = MybatisUtils.getSession();
	UserMapper mapper = session.getMapper(UserMapper.class);
	User user = new User(4,"李四","zxcvbn");
	int i = mapper.addUser(user);
	System.out,println(i);
	// 重点,提交事务,不写的话,不会提交到数据库
	session.commit();
	session.close();
	}

注意点:增、删、改操作需要提交事务!

Update

  1. 编写接口方法
int updateUser(User user);
  1. 编写对应的配置文件SQL
<update id = "updateUser" parameterType = "com.kuang.pojo.User">
	update user set name=#{name},pwd#{pwd} where id = #{id}
</update>
  1. 测试
@Test
public void testUpdateUser(){
	SqlSeesion sqlsession = MybatisUtils.getSession();
	UserMapper mapper = session.getMapper(UserMapper.class);
	int i = mapper.updateUser(User user);
	System.out.println(i);
	 //提交事务,重点!不写的话不会提交到数据库
	session.commit();
	session.close();
}

Delete

  1. 编写接口方法
int delectUser(int id);
  1. 编写对应的映射文件
<delete id = "deleteUser" paramterType = "int">
	delete from user where id = #{id}
</delete>
  1. 测试
@Test
public void testDeleteUser(){
	SqlSession session = MybatisUtils.getSession();
	UserMapper mapper = session.getMapper(UserMapper.class);
	int i = mapper.deleteUser(4);
	System.out.println(i);
	session.commit();
	session.close();
}

总结

  • 所有的增删改查都需要提交事务,session.commit()
  • 为了规范操作,在Sql配置文件上,我们尽量写上 Paramter 和 resultType
  • 接口上所有的普通参数,尽量都写上@Param参数
  • 根据业务需求,可以考虑使用Map传递参数

模糊查询

方法1:
string wildcardname = "%xmi%";
list<name> names = mapper.selectLike(wildcardname);
<select id = "selectLike">
	select * from foo where bar like #{value}
</select>
方法2:
string wildcardname = "smi";
list<name> names = mapper.selectLike(wildcardname);
<select id = "selectLike">
	select * from foo where bar like "%"#{value}"%"
</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值