【MyBatis】_使用XML实现MyBatis

打印 上一主题 下一主题

主题 1044|帖子 1044|积分 3132

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
1. 配置yml配置文件
1.2 配置数据库
1.3 配置xml的路径
2. xml文件中实现数据库的增删查改操纵
2.1 各文件内容
2.2 编写细节

MyBatis作为一个持久层框架,用于进行数据库操纵。
MyBatis的实现方式有两种:(1)注解;(2)XML;
本文先容基于XML实现MyBatis。
1. 配置yml配置文件

1.2 配置数据库

  1. spring:
  2.   datasource:
  3.     url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
  4.     username: root
  5.     password: xxxxxx
  6.     driver-class-name: com.mysql.cj.jdbc.Driver
复制代码
1.3 配置xml的路径

  1. mybatis:
  2.   configuration:
  3.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  4.     map-underscore-to-camel-case: true
  5.   mapper-locations: classpath:mapper/**Mapper.xml
复制代码
此中:
mapper是resources目录下的子目录名,**Mapper.xml表现该XML文件的定名方式必须以Mapper.xml结尾,二者均可自定名,注意对应即可; 
注:注意mapper-locations与configurations同层,都属于mybatis的下一层,注意对准层次
2. xml文件中实现数据库的增删查改操纵

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.zhouyou.mybatisdemo1.mapper.UserInfoXMLMapper">
  5. </mapper>
复制代码
此中,namespace的值是待实现接口(UserInfoXMLMapper)的全限定类名

现使用MyBatis操纵数据库实现增删查改操纵。
创建一个UserInfoXMLMapper接口,用于编写方法声明;
在resource下创建一个mapper包,再创建UserInfoXMLMapper.xml用于进行数据持久层的实现;
目录结构如下:


2.1 各文件内容

1、在Mapper类中编写各个方法声明:
  1. package com.zhouyou.mybatisdemo1.mapper;
  2. import com.zhouyou.mybatisdemo1.model.UserInfo;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.apache.ibatis.annotations.Param;
  5. import java.util.List;
  6. @Mapper
  7. public interface UserInfoXMLMapper {
  8.     List<UserInfo> selectAll();
  9.     Integer insert(@Param("userInfo") UserInfo userInfo);
  10.     Integer delete(Integer id);
  11.     Integer update(UserInfo userInfo);
  12. }
复制代码
2、 在UserInfoXMLMapper.xml中进行数据库操纵:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.zhouyou.mybatisdemo1.mapper.UserInfoXMLMapper">
  5.     <select id="selectAll" resultType="com.zhouyou.mybatisdemo1.model.UserInfo" >
  6.         select* from userInfo
  7.     </select>
  8.     <insert id="insert" useGeneratedKeys="true" keyProperty="id">
  9.         insert into userinfo (username, password, age, gender,phone)
  10.             VALUES (#{userInfo.username},#{userInfo.password},#{userInfo.age},#{userInfo.gender},#{userInfo.phone})
  11.     </insert>
  12.     <delete id="delete">
  13.         delete from userinfo where id=#{id}
  14.     </delete>
  15.     <update id="update">
  16.         update userinfo set age=#{age} where id=#{id}
  17.     </update>
  18. </mapper>
复制代码
3、创建测试类UserInfoXMLMapperTest内容如下:
  1. package com.zhouyou.mybatisdemo1.mapper;
  2. import com.zhouyou.mybatisdemo1.model.UserInfo;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import java.util.List;
  8. import static org.junit.jupiter.api.Assertions.*;
  9. @Slf4j
  10. @SpringBootTest
  11. class UserInfoXMLMapperTest {
  12.     @Autowired
  13.     private UserInfoXMLMapper userInfoXMLMapper;
  14.     @Test
  15.     void selectAll() {
  16.         List<UserInfo>  userInfos=userInfoXMLMapper.selectAll();
  17.         log.info(userInfos.toString());
  18.     }
  19.     @Test
  20.     void delete() {
  21.         userInfoXMLMapper.delete(10);
  22.     }
  23.     @Test
  24.     void update() {
  25.         UserInfo userInfo=new UserInfo();
  26.         userInfo.setAge(21);
  27.         userInfo.setId(8);
  28.         userInfoXMLMapper.update(userInfo);
  29.     }
  30.     @Test
  31.     void insert() {
  32.         UserInfo userInfo=new UserInfo();
  33.         userInfo.setUsername("tianqi");
  34.         userInfo.setPassword("tianqi");
  35.         userInfo.setAge(20);
  36.         userInfo.setGender(2);
  37.         userInfo.setPhone("18612340006");
  38.         Integer result = userInfoXMLMapper.insert(userInfo);
  39.         log.info("affected rows: {}\n"+
  40.                 "auto_increment primary key: {}",result,userInfo.getId());
  41.     }
  42. }
复制代码
 以上四个方法分别实现:全列选择查询、新增、更新/更改、删除;
2.2 编写细节

1、关于<select>标签:
select标签的id指明方法,注意需与接口定义的方法名保持同等,否则会报绑定错误:

select标签的resultType指明返回的数据的范例;
2、关于参数重定名问题,使用xml实现MyBatis和使用注解实现MyBatis方法相同,使用@Param注解实现。并且当参数范例为对象时,若进行了重定名,则需使用 对象名.属性名 作为参数名;
3、对selectAll(或selectOne)、insert、update、delete四个方法,只有selectAll(或selectOne)的<select>标签需设置resultType,其余三个方法无需设置;


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表