mybatis实现mapper代理模式的方式
今晚继续复习mybtis以根据id值查询单条数据为例编写SqlMapConfig.xml文件
<configuration> <!-- 使用mybatis需要的数据源和事务配置,后续如果整合spring之后,将不再需要 --> <environments default='development'> <!-- 配置数据源和事务 --> <environment id='development'> <!-- 配置事务管理,将事务管理交给mybatis管理 --> <transactionManager type='JDBC' /> <!-- 配置数据源 --> <dataSource type='POOLED'> <property name = 'driver' value = 'com.mysql.jdbc.Driver' /> <property name='url' value='jdbc:mysql://localhost:3306/db_shop? useUnicode=true&characterEncoding=utf-8'/> <property name='username' value='root'/> <property name='password' value=''/> </dataSource> </environment> </environments> <!-- 加载**.xml配置文件 --> <mappers> <mapper resource='product.xml'/></mappers> </configuration>
编写失血模型对象:Product,最好字段名和数据库里面的字段名一直
/**** <p>Title: Product</p> * <p>Description: 商品类失血模型</p> * @author Alon * @date 2020年9月27日 下午6:51:57 * @version 1.0 */ public class Product { private int p_id; private String name; private int p_number; private double price; private String add_time; public Product(int p_id, String name, int p_number, double price, String add_time) { super(); this.p_id = p_id; this.name = name; this.p_number = p_number; this.price = price; this.add_time = add_time; }public Product() { super(); } public int getP_id() {return p_id; } public void setP_id(int p_id) {this.p_id = p_id; }public String getName() { return name; } public void setName(String name) { this.name = name; } public int getP_number() {return p_number; } public void setP_number(int p_number) { this.p_number = p_number; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getAdd_time() { return add_time;}public void setAdd_time(String add_time) { this.add_time = add_time; }@Override public String toString() { return 'Product [p_id=' + p_id + ', name=' + name + ', p_number=' + p_number + ', price=' + price + ', add_time=' + add_time + ']'; } }
编写单个映射关系的sql.xml:product.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'> <!-- 映射的sql文件 namespace:命名空间,可以理解成将部分的sql语句进行隔离。到后面的mapper代理方式将有更 加重要的作用 --> <mapper namespace='test'> <!--select:表示要执行的查询语句 id:给这个查询语句取一个名字,唯一的,java中要调用的使用。 parameterType:输入参数的数据类型 resultType:输出参数的数据类型,一般绑定成model的对象 #{value}:表示用来和占位符一样,用来接受输入的参数值。 --> <select parameterType='java.lang.Integer' resultType='com.woniuxy.model.Product'> SELECT * FROM t_product WHERE p_id = #{value} </select> </mapper>
编写java代码进行测试执行sql语句并得到结果
/**** <p>Title: MybatisDemo1</p> * <p>Description: 查询数据的demo</p> * @author Alon * @date 2020年9月27日 下午7:05:32 * * @version 1.0 */ * public class MybatisDemo1 { * public static void main(String[] args) throws IOException { * new MybatisDemo1().queryById(); } * public void queryById() throws IOException { * //1、读取到SqlMapConfig.xml文件的流 String path = 'SqlMapConfig.xml'; * InputStream config = Resources.getResourceAsStream(path);//创建会话工厂,同时将SqlMapConfig.xml里面的数据放到工厂中 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); //开启会话 SqlSession sqlSession = factory.openSession(); /** 第一个参数:要执行哪个sql语句的参数,一般命名空间.id值 * 第二个参数:传入填充#{value}的传入参数值。 */ Object obj = sqlSession.selectOne('test.findById', 1); System.out.println(obj); } }
进行模糊查询:查询出多条结果集
<!-- 在原有的xml文件中进行配置即可,不需要新建,之前的也已经在SqlMapConfig.xml文件中进行了配 置 --> <select parameterType='java.lang.String' resultType='com.woniuxy.model.Product'> SELECT * FROM t_product WHERE name like '%${value}%' </select> public void queryByName() throws Exception{ String path = 'SqlMapConfig.xml'; //获取流对象 InputStream config = Resources.getResourceAsStream(path); //获取会话工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); //开启会话 SqlSession sqlSession = factory.openSession(); /** 因为执行结果有多条语句,那么必须使用selectList */ List<Object> list = sqlSession.selectList('test.queryByName', '旺仔'); //迭代 System.out.println(list); }
新增语句
<!-- 新增一条数据 parameterType:传入参数的数据类型,用失血模型对象即可。 --> <insert parameterType='com.woniuxy.model.Product'> INSERT INTO t_product(name,p_number,price) value(#{name},#{p_number},# {price}); </insert>
/****<p>Title: insert</p> *<p>Description: 新增数据</p> * @throws Exception * */ public void insert() throws Exception{ String path = 'SqlMapConfig.xml'; * //获取流对象 * InputStream config = Resources.getResourceAsStream(path); //获取会话工厂* SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); * //开启会话 * SqlSession sqlSession = factory.openSession();* Product prod = new Product();* prod.setName('雪碧'); * prod.setP_number(10); * prod.setPrice(3.0);* int row = sqlSession.insert('test.insertProduct', prod); System.out.println(row); sqlSession.commit(); sqlSession.close(); }
mapper代理的方式进行讲解增、删、改、查(重点)步骤1:创建对应的Mapper接口,和之前的dao接口一致步骤2:编写对应的xxmapper.xml配置文件。有要求1)mapper标签里面的namespace:必须写成对应的Mapper接口的全路径名2)sql语句里面的id:必须和接口中对应方法的名称一致。3)sql语句里面的parameterType:必须要和接口中方法的形式参数数据类型一致4)sql语句里面的resultType:必须和接口中方法的返回值数据类型一致步骤3:将编写好的**mapper.xml文件在SqlMapConfig.xml文件中加载步骤4:编写实现类,并在这里直接测试别名和mapper映射详解设置别名在mybatis配置文件中,别名是一直存在的,实际上在框架中已经存在一些默认的别名。比如java.lang.String对应的别名:String,java.lang.Integer对应的别名:int在开发中,一般mapper.xml配置文件中的parameterType和resultType往往对应的名称需要写上model的全路径,而且还是多次被重复使用,可以选择给该路径取一个别名。用别名来替换比较复杂的全路径名以扫描包的形式进行配置自定义的POJO类(重点)自定义POJO类,一般指的是高级查询,在想要的数据和传入的条件不再一张表中,通过表所创建的失血模型model已经不能够满足传入参数的需求了,这个时候,就需要使用自定义的POJO类因为一个失血模型已经不能够满足查询输入参数的要求了,所以进行扩展,创建一个UserCustom类,里面包含user对象声明和userInfo对象声明
以上就是mybatis实现mapper代理模式的方式的详细内容,更多关于mybatis mapper代理模式的资料请关注好吧啦网其它相关文章!
相关文章: