MyBatis框架:第三章:传统方式mybatis的增,删,改,查实现

简介: MyBatis框架:第三章:传统方式mybatis的增,删,改,查实现

传统方式mybatis的增,删,改,查实现

准备工作

创建java Project项目,建库建表插入数据,到数据库中执行,导入jar包

添加mybatis的核心jar

添加mysql数据库连接驱动

添加log4j日记需要的核心jar

在config目录下添加 log4j.propreties代码:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

开始编写

在config目录下添加 mybatis-config.xml代码:

<?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 是配置多个jdbc环境 
    default表示使用的默认环境 
   -->
  <environments default="development">
    <!-- 
      environment 标签用来配置一个环境 
        id 是环境的标识
     -->
    <environment id="development">
      <!-- 
        transactionManager  配置使用什么样类型的数据库事务管理
           type="JDBC"    表示启用事务,有commit和rollback操作
           type="MANAGED" 表示不直接控制事务。交给容器处理几乎不用。
       -->
      <transactionManager type="JDBC" />
      <!-- 
        dataSource标签配置连接池
          type="POOLED" 表示启用数据库连接池
          type="UNPOOLED" 表示不启用数据库连接池
       -->
      <dataSource type="POOLED">
        <!-- 连接数据库的驱动类 -->
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <!-- 数据库访问地址 -->
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
        <!-- 数据库用户名 -->
        <property name="username" value="root" />
        <!-- 数据库密码 -->
        <property name="password" value="root" />
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <!-- 导入mapper配置文件 -->
    <mapper resource="com/pojo/UserMapper.xml" />
  </mappers>
</configuration>

创建一个UserDao接口

public interface UserDao {
  // 保存用户
  public int saveUser(User user);    
  // 更新用户
  public int updateUser(User user);    
  // 根据id删除用户
  public int deleteUserById(int id);    
  // 根据id搜索用户
  public User findUserById(int id);    
  // 搜索全部用户
  public List<User> findUsers();    
}

编写UserMapper.xml中的配置

<?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">
  <!-- 
    namespace属性是名称空间的意思。
    功能相当于 给配置文件定义一个包名。
    一般情况下。可以写两种值,一种是对应类的全类名
    一种情况是。对应类的处理接口全类名
   -->
<mapper namespace="com.pojo.User">
  <!-- 插入用户
    parameterType 属性设置参数类型
    id 为使用的标识
  -->
  <insert id="saveUser" parameterType="com.pojo.User">
    insert into t_user(last_name,sex) values(#{lastName},#{sex})
  </insert>
  <!-- 更新用户 
    parameterType 属性设置参数类型
    id 为使用的标识
    -->
  <update id="updateUser" parameterType="com.pojo.User">
    update t_user
      set
    last_name = #{lastName},
    sex = #{sex}
      where
    id = #{id}
  </update>
  <!-- 根据id删除用户
    parameterType 属性设置参数类型
    id 为使用的标识        
     -->
  <delete id="deleteUserById" parameterType="int">
    delete from t_user where id = #{id}
  </delete>
  <!-- 根据id搜索用户
    parameterType 属性设置参数类型
    id 为使用的标识 
    resultType 属性是返回的类型
     -->
  <select id="findUserById" parameterType="int" resultType="com.pojo.User">
    select id,last_name lastName,sex from t_user where id = #{id}
  </select>
  <!-- 搜索全部用户
    id 为使用的标识 
    resultType 属性是返回的类型
     -->
  <select id="findUsers" resultType="com.pojo.User">
    select id,last_name lastName,sex from t_user
  </select>
</mapper>

UserDaoImpl代码:

public class UserDaoImpl implements UserDao {
  SqlSessionFactory sqlSessionFactory;
  public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
    this.sqlSessionFactory = sqlSessionFactory;
  }
  @Override
  public int saveUser(User user) {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    int result = 0;
    try {
      result = sqlSession.insert("com.pojo.User.saveUser", user);
      //提交事务
      sqlSession.commit();
    } finally {
      sqlSession.close();
    }
    return result;
  }
  @Override
  public int updateUser(User user) {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    int result = 0;
    try {
      result = sqlSession.update("com.pojo.User.updateUser", user);
      //提交事务
      sqlSession.commit();
    } finally {
      sqlSession.close();
    }
    return result;
  }
  @Override
  public int deleteUserById(int id) {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    int result = 0;
    try {
      result = sqlSession.delete("com.pojo.User.deleteUserById", id);
      //提交事务
      sqlSession.commit();
    } finally {
      sqlSession.close();
    }
    return result;
  }
  @Override
  public User findUserById(int id) {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    User result = null;
    try {
      result = sqlSession.selectOne("com.pojo.User.findUserById", id);
      //提交事务
      sqlSession.commit();
    } finally {
      sqlSession.close();
    }
    return result;
  }
  @Override
  public List<User> findUsers() {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    List<User> result = null;
    try {
      result = sqlSession.selectList("com.pojo.User.findUsers");
      //提交事务
      sqlSession.commit();
    } finally {
      sqlSession.close();
    }
    return result;
  }
}

测试类:

public class UserDaoTest {
  static UserDao userDao;
  /**
   * @BeforeClass标注的方法会在所有测试之前执行之前执行一次
   * @throws Exception
   */
  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
    String url = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(url);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    userDao = new UserDaoImpl(sqlSessionFactory);
  }
  @Test
  public void testSaveUser() {
    userDao.saveUser(new User(null,"admins",0));
  }
  @Test
  public void testUpdateUser() {
    userDao.updateUser(new User(2, "admin", 1));
  }
  @Test
  public void testDeleteUserById() {
    userDao.deleteUserById(2);
  }
  @Test
  public void testFindUserById() {
    System.out.println(userDao.findUserById(1));
  }
  @Test
  public void testFindUsers() {
    System.out.println(userDao.findUsers());
  }
}
相关文章
|
3月前
|
Java 数据库连接 Maven
后端框架学习-----mybatis(使用mybatis框架遇到的问题)
这篇文章总结了在使用MyBatis框架时可能遇到的几个常见问题及其解决方法,包括配置文件注册、接口绑定、方法名匹配、返回类型匹配、Maven资源导出、时区设置和字符编码问题。
|
15天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
32 1
持久层框架MyBatisPlus
|
29天前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
29 0
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
3月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
3月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
4月前
|
Java 数据库连接 Spring
搭建 spring boot + mybatis plus 项目框架并进行调试
搭建 spring boot + mybatis plus 项目框架并进行调试
93 4