Java后端05(初识MyBatis)

打印 上一主题 下一主题

主题 748|帖子 748|积分 2244

Mybatis

举个小栗子

mybatis配置文件(XML配置文件)
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4.     <typeAliases>
  5.         <package name="com.iweb.entity"/>
  6.     </typeAliases>
  7.     <environments default="development">
  8.         <environment id="development">
  9.             <transactionManager type="JDBC"/>
  10.             <dataSource type="POOLED">
  11.                 <property name="url" value="jdbc:mysql://localhost:3306/iweb?characterEncoding=utf-8"/>
  12.                 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  13.                 <property name="username" value="root"/>
  14.                 <property name="password" value="123456"/>
  15.             </dataSource>
  16.         </environment>
  17.     </environments>
  18.     <mappers>
  19.         <mapper resource="mapper/user.xml"/>
  20.     </mappers>
  21. </configuration>
复制代码
user.xml(实现增删改查的sql语句)
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.iweb.entity">
  4.     <select id="listUser" resultType="User">select * from user</select>
  5.     <insert id="addUser" parameterType="User">insert into user values (#{userId},#{username},#{password})</insert>
  6.     <delete id="deleteUser" parameterType="String">delete from user where userId = #{userId}</delete>
  7.     <update id="updateUser" parameterType="User">update user set username = #{username},password = #{password} where userId = #{userId}</update>
  8.     <select id="getUser" parameterType="String" resultType="User">select * from user where userId = #{userId}</select>
  9.     <select id="listUserByNameLike" parameterType="String" resultType="User">select * from user where username like concat('%',#{0},'%')</select>
  10.     <select id="listUserByIdAndNameLike" parameterType="map" resultType="User">select * from user where userId > #{userId} and username like concat('%',#{username},'%')</select>
  11. </mapper>
复制代码
使用做sql查询(Test)
  1. public void test1() throws IOException {
  2.     private SqlSession sqlSession;
  3.     @Before
  4.     public void init() throws IOException {
  5.         // 输入流读取配置文件信息
  6.         String resource = "mybatis-config.xml";
  7.         InputStream inputStream = Resources.getResourceAsStream(resource);
  8.         // 基于配置文件获取 mybatis 的一级缓存对象
  9.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  10.         // 基于这个一级缓存,创建一个二级缓存
  11.         sqlSession = sqlSessionFactory.openSession();
  12.     }
  13.     @Test
  14.     public void test01(){
  15.         // 使用二级缓存实现sql语句调用
  16.         List<User> userList = sqlSession.selectList("listUser");
  17.         // 遍历集合
  18.         for (User user : userList) {
  19.             System.out.println(user);
  20.         }
  21.     }
  22.     @Test
  23.     public void test02(){
  24.         User user = new User("3","robot01","123456");
  25.         sqlSession.insert("addUser",user);
  26.         // mybatis 需要手动提交缓存
  27.         sqlSession.commit();
  28.         test01();
  29.     }
  30.     @Test
  31.     public void test03(){
  32.         User user = new User();
  33.         user.setUserId("3");
  34.         sqlSession.delete("deleteUser",user);
  35.         sqlSession.commit();
  36.         test01();
  37.     }
  38.     @Test
  39.     public void test04(){
  40.         User user = sqlSession.selectOne("getUser","2");
  41.         System.out.println(user);
  42.     }
  43.     @Test
  44.     public void test05(){
  45.         User user = new User("2","HSS","123456");
  46.         sqlSession.update("updateUser",user);
  47.         sqlSession.commit();
  48.         test01();
  49.     }
  50.     @Test
  51.     public void test06(){
  52.         List<User> users = sqlSession.selectList("listUserByNameLike","ss");
  53.         System.out.println(users);
  54.     }
  55.     @Test
  56.     public void test07(){
  57.         Map<String,Object> params = new HashMap<>();
  58.         params.put("userId",2);
  59.         params.put("username","ss");
  60.         List<User> users = sqlSession.selectList("listUserByIdAndNameLike",params);
  61.         System.out.println(users);
  62.     }
  63. }
复制代码
一对多关系查询

配置文件(⭐注意:每一个配置文件都需要在 mybatis-config.xml 中进行注册!!!!!!!!!)
  1. <resultMap id="productBean" type="Product">
  2.     <id column="productId" property="productId"/>
  3.     <result column="productName" property="productName"/>
  4.     <result column="price" property="price"/>
  5.     <result column="stock" property="stock"/>
  6.     <association property="user" javaType="User">
  7.         <id column="uId" property="userId"/>
  8.         <result column="username" property="username"/>
  9.     </association>
  10. </resultMap>
  11. <select id="listProduct" resultMap="productBean">
  12.     select productName,productId,price,stock,u.userId 'uId',username from product left join user u on product.userId = u.userId
  13. </select>
复制代码
测试类
  1. public class TestMybatis {
  2.     private SqlSession sqlSession;
  3.     @Before
  4.     public void init() throws IOException {
  5.         // 输入流读取配置文件信息
  6.         String resource = "mybatis-config.xml";
  7.         InputStream inputStream = Resources.getResourceAsStream(resource);
  8.         // 基于配置文件获取 mybatis 的一级缓存对象
  9.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  10.         // 基于这个一级缓存,创建一个二级缓存
  11.         sqlSession = sqlSessionFactory.openSession();
  12.     }
  13.     @Test
  14.     public void test01(){
  15.         List<Product> productList = sqlSession.selectList("listProduct");
  16.         for (Product product : productList) {
  17.             System.out.println(product);
  18.         }
  19.     }
  20. }
复制代码
动态sql查询

配置文件(⭐注意:每一个配置文件都需要在 mybatis-config.xml 中进行注册!!!!!!!!!)
  1. <select id="listProduct" resultType="product">
  2.     select * from product
  3.     <if test="productName != null">
  4.         where productName like concat('%',#{productName},'%')
  5.     </if>
  6. </select>
复制代码
测试类
  1. @Test
  2. public void test01(){
  3.     List<Product> productList = sqlSession.selectList("listProduct");
  4.     for (Product product : productList) {
  5.         System.out.println(product);
  6.     }
  7. }
  8. @Test
  9. public void test02(){
  10.     Map<String,String> params = new HashMap<>();
  11.     params.put("productName","1");
  12.     List<Product> productList = sqlSession.selectList("listProduct",params);
  13.     for (Product product : productList) {
  14.         System.out.println(product);
  15.     }
  16. }
复制代码
多条件查询
  1. <select id="listProduct" resultType="Product">
  2.     select * from product
  3.     <where>
  4.         <if test="productName != null">
  5.             and productName like concat('%',#{productName},'%')
  6.         </if>
  7.         <if test="price != 0">
  8.             and price > #{price}
  9.         </if>
  10.     </where>
  11. </select>
复制代码
测试类
  1. @Test
  2. public void test01(){
  3.     Map<String,Object> params = new HashMap<>();
  4.     params.put("productName","1");
  5.     params.put("price",0);
  6.     List<Product> productList = sqlSession.selectList("listProduct",params);
  7.     for (Product product : productList) {
  8.         System.out.println(product);
  9.     }
  10. }
复制代码
动态sql更新
  1. <update id="updateProduct">
  2.     update product
  3.     <set>
  4.         <if test="productName != null">
  5.             productName = #{productName},
  6.         </if>
  7.         <if test="price != null">
  8.             price = #{price},
  9.         </if>
  10.         <if test="stock != null">
  11.             stock = #{stock},
  12.         </if>
  13.     </set>
  14.     where productId = #{productId}
  15. </update>
复制代码
测试类
  1. @Test
  2. public void test01(){
  3.     Map<String,Object> params = new HashMap<>();
  4.     params.put("productId","1");
  5.     params.put("productName","product");
  6.     params.put("price","10086");
  7.     params.put("stock","10000");
  8.     sqlSession.update("updateProduct",params);
  9.     sqlSession.commit();
  10. }
复制代码
when otherwise 标签
  1. <mapper namespace="com.iweb.entity">
  2.     <select id="listProduct" resultType="Product">
  3.         select * from product
  4.         <where>
  5.             <choose>
  6.                 <when test="productName != null">
  7.                     and name like concat('%',#{productName},'%')
  8.                 </when>
  9.                 <when test="price != null">
  10.                     and price > #{price}
  11.                 </when>
  12.                 <otherwise>
  13.                     and id > 5
  14.                 </otherwise>
  15.             </choose>
  16.         </where>
  17.     </select>
  18. </mapper>
复制代码
使用注解方式实现简单的sql

mapper接口文件(一定要注册!!!!!!)
  1. /**
  2. * 通过接口(底层是java的JDK动态代理)实现 mybatis 调用
  3. * 开发人员只需要关心接口,实现类由 mybatis 动态生成
  4. * 1. 注解开发方式: 适用于简单场景(注解场景下编写一对多 多对一 或者是动态sql非常麻烦)
  5. * 2. xml配置文件开发方式:适用于所有场景(推荐)
  6. * @author te9uila
  7. * @since 2023/8/5
  8. */
  9. public interface ProductMapper {
  10.     @Insert("insert into product values (#{productId},#{productName},#{price},#{stock},#{userId})")
  11.     void add(Product product);
  12.     @Delete("delete from product where productId = #{productId}")
  13.     void delete(String id);
  14.     @Select("select * from product where productId = #{productId}")
  15.     Product get(String id);
  16.     @Update("update product set productName = #{productName},price = #{price},stock = #{stock} where productId = #{productId}")
  17.     int update(Product product);
  18.     @Select("select * from product")
  19.     List<Product> list();
  20. }
复制代码
测试类
  1. @Test
  2. public void test01(){
  3.     ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
  4.     List<Product> productList = productMapper.list();
  5.     System.out.println(productList);
  6. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表