软件编程
位置:首页>> 软件编程>> java编程>> Mybatis基于xml配置实现单表的增删改查功能

Mybatis基于xml配置实现单表的增删改查功能

作者:小小张自由—>张有博  发布时间:2021-09-29 11:21:48 

标签:Mybatis,单表,增删改查

Mybatis入门-基于配置实现单表的增删改查

Mybatis简介

官网链接:https://mybatis.org/mybatis-3/zh/index.html。更加详细的信息可以去官网查看。

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:


<dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>x.x.x</version>
</dependency>

配置步骤

1.引入Mybatis的jar包

2.编写实体类与DAO接口

3.添加主配置文件(配置mysql环境,事务类型,数据源,连接数据库的基本信息,映射文件的位置)

4.添加DAO接口的映射文件(需要指明DAO接口的位置,为每个方法做一个映射)注:所在路径在Resource文件夹下,目录路径需要DAO的层次结构一样

5.使用mybatis框架

使用步骤(所有的xml配置已配置完毕)

1.读取配置文件,可使用mybatis封装的Resources类。

2.创建SQLSessionFactory工厂

3.使用工厂生产SQLsession对象

4.使用SQLSession创建DAO接口的代理对象

5.使用代理对象执行方法

6.提交事务,释放资源

基础数据

实体类


public class User implements Serializable {

/**
    * Java实体类为什么要实现Serializable接口
    *  1.用于序列化与反序列化--一个类只有实现了Serializable接口,它的对象才能被序列化。
    *  2.Serializable接口就是Java提供用来进行高效率的异地共享实例对象的机制,实现这个接口即可。
    */

private Integer id;
   private String username;
   private Date birthday;
   private String sex;
   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 Date getBirthday() {
       return birthday;
   }

public void setBirthday(Date birthday) {
       this.birthday = birthday;
   }

public String getSex() {
       return sex;
   }

public void setSex(String sex) {
       this.sex = sex;
   }

public String getAddress() {
       return address;
   }

public void setAddress(String address) {
       this.address = address;
   }

@Override
   public String toString() {
       return "User{" +
               "id=" + id +
               ", username='" + username + '\'' +
               ", birthday=" + birthday +
               ", sex='" + sex + '\'' +
               ", address='" + address + '\'' +
               '}';
   }

DAO层的接口


public interface IUserDao {

/**
    * 查询所有
    * @return 所有的User信息
    */
   //@Select("select * from User")
   List<User> findAll();

/**
    * 保存操作
    * @param user
    */
   //@Insert("insert into User(username,address,sex,birthday)values()")
   void saveUser(User user);

/**
    * 更改操作
    */
   void updateUser(User user);

/**
    * 删除操作
    * @param i
    */
   void deleteUser(Integer i);

/**
    * 根据id查询单个用户
    * @param id
    * @return
    */
   User findById(Integer id);

/**
    * 根据名称模糊查询
    * @param name
    * @return
    */
   List<User> findByName(String name);

/**
    * 查询总用户数
    * @return
    */
   int findTotal();
}

主配置文件


<?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">
<!--myBatis的主配置文件 -->
<configuration>
   <!--配置环境-->
   <environments default="mysql">
       <!--配置mysql环境-->
       <environment id="mysql">
           <!--配置事务的类型-->
           <transactionManager type="JDBC"></transactionManager>
           <!--配置数据源(连接池)-->
           <dataSource type="POOLED">
               <!--配置连接数据库的基本信息-->
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
               <property name="username" value="root"/>
               <property name="password" value="root"/>
           </dataSource>
       </environment>
   </environments>
   <!--映射文件 配置文件方式-->
   <mappers>
       <mapper resource="com/dynamic_basics/dao/IUserDao.xml"></mapper>
   </mappers>

<!--映射文件 注解方式(使用注解就要删除源配置文件)-->
  <!-- <mappers>
       <mapper class="com.dynamic_basics.dao.IUserDao"></mapper>
   </mappers>-->
</configuration>

子配置文件


<?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 namespace="com.dynamic_basics.dao.IUserDao">

<!--使用配置的方式解决Java实体类与数据库列名不一致的问题-->
   <resultMap id="userMap" type="com.dynamic_basics.domain.User">
       <!--主键字段-->
       <id property="userId" column="id"></id>
       <!--非主键字段-->
       <result property="userName" column="username"></result>
       <result property="userAddress" column="address"></result>
       <result property="userSex" column="sex"></result>
       <result property="userBirthday" column="birthday"></result>
   </resultMap>

<!--查询所有 id使用方法名-->
   <select id="findAl l" resultType="com.dynamic_basics.domain.User" resultMap="userMap">
       select * from user
   </select>

<!--保存用户-->
   <insert id="saveUser" parameterType="com.dynamic_basics.domain.User">
       <!--参数使用了ognl表达式-->
       insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
   </insert>

<!--更新用户-->
   <insert id="updateUser" parameterType="com.dynamic_basics.domain.User">
      update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
   </insert>

<!--删除用户-->
   <delete id="deleteUser" parameterType="int">
       delete from User where id=#{id}
   </delete>

<!--根据id查询用户-->
   <select id="findById" parameterType="int" resultType="com.dynamic_basics.domain.User">
       select * from user where id=#{id}
   </select>

<!--根据名称模糊查询-->
   <select id="findByName" resultType="com.dynamic_basics.domain.User" parameterType="String">
       select * from user where username like #{name}
   </select>

<!--获取用户的总记录数-->
   <select id="findTotal" resultType="int">
       SELECT COUNT(id) FROM `user`;
   </select>

</mapper>

测试类


/**
* @Author: Promsing
* @Date: 2021/3/29 - 8:58
* @Description: 描述 形容
* @version: 1.0
*/
public class MyBatisTest {

private InputStream in;
   private SqlSession sqlSession;
   private IUserDao userDao;
   @Before
   public void init()throws Exception{
       //1.读取配置文件  Resources是myBatis封装的类
       in= Resources.getResourceAsStream("SqlMapConfig.xml");
       //2.创建SQLSessionFactory工厂
       //  SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
       SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
       SqlSessionFactory factory=builder.build(in);
       //3.使用工厂生产SQLSession对象
       sqlSession = factory.openSession();
       //4.使用SQLSession创建DAO接口的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
   }
   @After
   public void destory()throws Exception{
       //6.释放资源
       //提交事务
       sqlSession.commit();
       sqlSession.close();
       in.close();
   }
   //入门案例

/**
    * 查询操作
    */
   @Test
  public void selectUser(){

//初始化资源-使用注解Before

//5.使用代理对象执行方法
       List<User> all = userDao.findAll();
       for (User user : all) {
           System.out.println(user);
       }
       //释放资源-使用注解After

}

/**
    * 测试保存
    */
   @Test
   public void testSave() {
       User user=new User();
       user.setUsername("mybatis");
       user.setAddress("北京市延庆区");
       user.setSex("女");
       user.setBirthday(new Date());

//初始化资源-使用注解Before

//5.使用代理对象执行方法
       userDao.saveUser(user);

//释放资源-使用注解After

}

/**
    * 测试修改
    */
   @Test
   public void testUpdate() {
       User user=new User();
       user.setId(50);
       user.setUsername("mybatis_plus");
       user.setAddress("北京市安次");
       user.setSex("男");
       user.setBirthday(new Date());

//初始化资源-使用注解Before

//5.使用代理对象执行方法
       userDao.updateUser(user);

//释放资源-使用注解After

}

/**
    * 测试删除
    */
   @Test
   public void testDelete() {

//初始化资源-使用注解Before

//5.使用代理对象执行方法
       userDao.deleteUser(50);

//释放资源-使用注解After

}
   /**
    * 查询单个人员信息
    */
   @Test
   public void testFindById() {

//初始化资源-使用注解Before

//5.使用代理对象执行方法
       User user=userDao.findById(49);
       System.out.println(user);

//释放资源-使用注解After

}

/**
    * 模糊查询
    */
   @Test
   public void testFindByName() {

//初始化资源-使用注解Before

//5.使用代理对象执行方法
       List<User> users=userDao.findByName("%王%");
      users.forEach(i-> System.out.println(i));

//释放资源-使用注解After

}

/**
    * 测试查询总记录条数
    */
   @Test
   public void testFindTotal() {

//初始化资源-使用注解Before

//5.使用代理对象执行方法
       int total=userDao.findTotal();
       System.out.println(total);

//释放资源-使用注解After

}

}

来源:https://blog.csdn.net/promsing/article/details/115380863

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com