2021-04-14

Mybatis实现简单的数据库增删改查操作
框架:mybatis(3.5.2)

数据库:mysql

工具:idea

1、新建一个maven项目,在pom文件中添加mybatis依赖及MySQL依赖



org.mybatis
mybatis
${mybatis.version}

<!-- mysql驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
</dependency>

2、新建实体类Users、工具类MybatisUtils、数据访问接口UserDao及它的实现类UserDaoImpl
Users类:

private Integer uid;
private String userName;

public Integer getUid() {
return uid;
}

public void setUid(Integer uid) {
this.uid = uid;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

MybatisUtils类:

private static SqlSessionFactory sqlSessionFactory;

/**

  • 在静态代码块中初始化工厂
    */
    static{
    //先查找mybatis的核心配置文件来初始化数据源,
    //默认从classpath下查找核心配置文件
    try {
    //注意:import org.apache.ibatis.io.Resources;
    InputStream is = Resources.getResourceAsStream(“mybatis.xml”);
    //创建一个SqlSessionFactoryBuilder来解析配置文件的信息,
    // 然后创建出SqlSessionFactory实例
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    //build方法传入一个输入流,通过解析后返回一个SqlSessionFactory实例
    sqlSessionFactory = builder.build(is);

    } catch (IOException e) {
    e.printStackTrace();
    }
    }

/**

  • 提供一个获取SqlSession的方法

  • @param autoCommit 在获取SQL Session时可以传递一个boolean类型的参数值,

  •         这个参数的作用似乎用于设置是否手动提交事务还是自动提交事务,
    
  •         false为手动提交,true为自动提交
    
  • @return
    */
    public static SqlSession getSqlSession(boolean autoCommit){
    //通过openSession方法来创建一个sqlSession实例,
    //有了SqlSession,就可以来访问数据库
    return sqlSessionFactory.openSession(autoCommit);
    UserDao接口:

    /**

    • 通过传递一个对象形式保存用户
    • @param user
      */
      void save(Users user);

    /**

    • 通过传递一个map集合保存用户
    • @param map
      */
      void save2(Map<String, Object> map);

    /**

    • 通过传递一个对象修改用户
    • @param user
      */
      void update(Users user);

    /**

    • 通过id删除用户
    • @param id
      */
      void delete(int id);

    /**

    • 通过传递多个参数修改用户
    • @param userName
    • @param uid
      */
      void update2(String userName, int uid);

/**
* 根据id查询一条结果集,返回一个实体对象
* @param uid
* @return
*/
Users getUserById(String uid);

/**
* 根据id查询一条结果集,返回一个map集合
* @param id
* @return
*/
Map<String, Object> getUserById2(String id);

/**
* 查询所有,返回多个Users对象
* @return
*/
List listUser();

/**
* 根据所有结果集,返回多个map集合
* @return
*/
List<Map<String, Object>> listUser2();
在UserDaoImpl类实现UserDao接口并重写抽象方法:

@Override
public void save(Users user) {
//获取SqlSession实例,true表示自动提交事务
try(SqlSession session = MybatisUtils.getSqlSession(true)){
//getMapper方法返回一个代理对象,这个代理对象也是实现了UserDao接口
//底层使用JDK动态代理技术
UserDao dao = session.getMapper(UserDao.class);
//当执行save方法时,其实调用的时代理对象的save,
//它会解析mapper映射配置文件,找到id为save的元素
//并执行其中的sql语句
dao.save(user);
}catch (RuntimeException e){

    throw e;
}

}

@Override
public void save2(Map<String, Object> map) {
try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)){
sqlSession.getMapper(UserDao.class).save2(map);
}catch(RuntimeException e){
throw e;
}
}

@Override
public void update(Users user) {
try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)){
sqlSession.getMapper(UserDao.class).update(user);
}catch (RuntimeException e){
throw e;
}
}

@Override
public void delete(int id) {
try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)){
sqlSession.getMapper(UserDao.class).delete(id);
}catch (RuntimeException e){
throw e;
}
}

@Override
public void update2(String userName, int uid) {
try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) {
sqlSession.getMapper(UserDao.class).update2(userName, uid);
}catch (RuntimeException e){
throw e;
}
}

@Override
public Users getUserById(String uid) {
try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) {
return sqlSession.getMapper(UserDao.class).getUserById(uid);
}catch (RuntimeException e){
throw e;
}
}

@Override
public Map<String, Object> getUserById2(String id) {
try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) {
return sqlSession.getMapper(UserDao.class).getUserById2(id);
}catch (RuntimeException e){
throw e;
}
}

@Override
public List listUser() {
try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) {
return sqlSession.getMapper(UserDao.class).listUser();
}catch (RuntimeException e){
throw e;
}
}

@Override
public List<Map<String, Object>> listUser2() {
try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) {
return sqlSession.getMapper(UserDao.class).listUser2();
}catch (RuntimeException e){
throw e;
}
}

上述这些类的结构如图所示:

3、在main目录下的resources目录中新建一个mybatis.xml文件,以及mapper文件夹下新建一个UsersMapper.xml(此文件命名规范是实体类名+Mapper)如图所示:

mybatis.xml:

<?xml version="1.0" encoding="utf-8"?>
<!-- 指定mapper配置文件 -->
<mappers>
    <mapper resource="mapper/UsersMapper.xml" />
</mappers>

UsersMapper.xml:

<?xml version="1.0" encoding="utf-8"?> insert into user_info(u_name) values(#{userName})
<!-- 如果参数类型时Map集合,那么#{}表达式对应的就是Map的kek,parameterType中也可以为map -->
<insert id="save2" parameterType="java.util.Map">
    insert into user_info(u_name) values(#{uname})
</insert>

<update id="update" parameterType="edu.nf.ch01.entity.Users">
    update user_info set u_name = #{userName} where u_id = #{uid};
</update>

<delete id="delete" parameterType="int">
    delete from user_info where u_id = #{id}
</delete>
<!-- 当有多个参数时,不需要指定parameterType属性,
而是使用#{param1}#{param2}...的方式映射参数,对应方法参数的顺序 -->
<update id="update2">
    update user_info set u_name = #{param1} where u_id = #{param2}
</update>

<!-- 查询当个用户,将结果集封装成一个实体对象
 resultType属性指定查询结果集的返回类型,
 如果返回一个实体,则返回引用mybatis.xml文件中Alias设置的别名
 需要注意的是,查询sql语句中,查询column必须要和实体的字段名称相同-->
<select id="getUserById" parameterType="java.lang.String" resultType="users">
    select u_id as uid, u_name as userName from user_info2 where u_id = #{id}
</select>

<!-- 查询单个用户,将结果集封装成一个map集合
 此时只需要将resultType设置为map即可-->
<select id="getUserById2" parameterType="java.lang.String" resultType="map">
    select u_id, u_name from user_info2 where u_id = #{id}
</select>

<!-- 查询用户列表,返回list集合,集合中封装了多个实体对象 -->
<select id="listUser" resultType="users">
    select u_id as uid, u_name as userName from user_info2
</select>

<!-- 查询用户列表,返回list集合,集合中存放多个map对象 -->
<select id="listUser2" resultType="map">
    select u_id, u_name from user_info2
</select>
4、数据库代码: 数据库:mybatis

数据表:user_info

create table user_info(
u_id int primary key auto_increment,
u_name varchar(50) not null
);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值