zoukankan      html  css  js  c++  java
  • 十一、持久层框架(MyBatis)

    一、基于注解方式的CRUD

    把xml方式的CRUD修改为注解方式

    之前在xml中配置,是在<mapper></mapper>标签下写CRUD

    <mapper namespace="com.demo.pojo">
        <select id="listProduct" parameterType="Product">
        select * from product_table
        </select>
        <insert id="addProduct" parameterType="Product"> 
            insert into product_table (name) values (#{name})
        </insert>
        <update id="updateProduct" parameterType="Product">
            update product_table set name=#{name} where id=#{id}
        </update>
        <delete id="deleteProduct" parameterType="Product">
            delete from product_table where id=#{id}
        </delete>
    <mapper>

    1、因此要增加Mapper接口方式实现

    比如要把之前映射文件Product.xml配置方式变成注解方式的,新建一个ProductMapper接口,并在接口中声明的方法上,加上注解就可以(也就是把SQL语句从xml上移到了注解上来)

    package com.demo.mapper;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Delete;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Select;
    import org.apache.ibatis.annotations.Update;
    
    import com.demo.pojo.Product;
    
    public interface ProductMapper{
        @Insert(" inert into product_table (name) values (#{name}) ")
        public int add(Product product);
        @Delete(" delete from product_table where id=#{id} ")
        public void delete(int id);
        @Select(" select * from product_table where id=#{id} ")
        public Product select(int id);
        @Update(" update product_table set name=#{name} where id=#{id} ")
        public int update(Product product);
        @Select(" select * from product_table ")
        public List<Product> selectAll();
    }
    View Code

    2、在mybatis-config.xml配置文件中,配置对ProductMapper接口的映射,至于原来的Product.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>
        <typeAliases>
          <package name="com.demo.pojo"/>
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
                <!--基于xml配置的映射文件-->
            <mapper resource="com/demo/pojo/Product.xml"/>
            <!--基于注解方式配置的映射-->
            <mapper class="com.demo.mapper.ProductMapper"/>  
        </mappers>
    </configuration>
    View Code

    3、TestMyBatis测试如下:

    进行简单的CRUD测试。

    package com.demo;
    import java.io.IOException;
    import java.io.InputSteam;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.io.Resouces;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import com.demo.pojo.Product;
    import com.demo.mapper.ProductMapper;
    
    public class TestMyBatis{
        public static void main(String[] args) throws IOException{
            String resouce="mybatis-config.xml";
            InputSteam inputStream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=sqlSessionFactory.openSession();
            ProductMapper mapper=session.getMapper(ProductMapper.class);//加载基于注解方式配置的映射文件。
            
            select(mapper);
            insert(mapper);
            update(mapper);
            delete(mapper);
            selectAll(mapper);
            
            session.commit();
            session.close();
            
        }
        
        private static void select(ProductMapper mapper){
            Product p=mapper.get(1);//获取id=1的产品
            System.out.println(p);
        }
        
        private static void insert(ProductMapper mapper){
            Product p=new Product();
            p.setName("新增一个product");
            mapper.add(p);
            selectAll(mapper);
        }
        
        private static void update(ProductMapper mapper){
            Product p=new Product();
            p.setId(1);
            mapper.update(p);
            selectAll(mapper);
        }
        
        private static void delete(ProductMapper mapper){
            mapper.delete(1);
            selectAll(mapper);
        }
        
        private static void selectAll(ProductMapper mapper){
            List<Product> list=mapper.list();
            for(Product p:list){
                System.out.println(p);
            }
        }
    }
    View Code
  • 相关阅读:
    设计模式-状态模式
    Nginx相关
    Docker基础使用
    JavaScript定时器及回调用法
    前端交互篇
    基于ConcurrentHashMap的本地缓存
    J.U.C体系进阶(五):juc-collections 集合框架
    J.U.C体系进阶(四):juc-sync 同步器框架
    J.U.C体系进阶(三)- juc-atomic 原子类框架
    .net core https 双向验证
  • 原文地址:https://www.cnblogs.com/drq1/p/8567888.html
Copyright © 2011-2022 走看看