zoukankan      html  css  js  c++  java
  • 学习Mybatis中的约定大于配置、数据库配置优化、定义别名、类型处理器、resultMap和parameterType

      一、在昨天的基础上,在测试类中

     SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
    		 SqlSession session = sessionFactory.openSession();
    		 String statement="org.ruangong.mapper.personMapper.queryall";
    		 List<Person> list = session.selectList(statement);
    

      替换为:

     SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
    		 SqlSession session = sessionFactory.openSession();
    		 personMapper personmapper = session.getMapper(personMapper.class);
    		 Person person = personmapper.queryPersonById(1);
    

      这种优化叫做:约定大于配置。

    定义接口 personMapper:这个接口名称对应personMapper.xml的前缀,因为这样才能映射到这个xml文件上。

    public interface personMapper {
    	Person queryPersonById(int id);
    	void add(Person person);
    	
    }
    

      定义函数名就是对应personMapper.xml文件中每一条数据库操作语句对应的id值,这样通过接口才能映射到xml中的每一个语句。

     然后在测试类中:

     personMapper personmapper = session.getMapper(personMapper.class);
    Person person = personmapper.queryPersonById(1);
    personmapper.add(person);
    

      进行数据库操作,不用再去写statement了。

    二、其次创建普通文件命名为:db.properties,为了将数据库配置进行优化。

     在conf.xml文件中:<configuration>标签下添加标签:<properties resource="db.properties"/>

    然后将数据库配置信息的value值全部换为"${key}",key值为对应前面的name值。

     三、为了命名方便,方便编码,将配置文件中比较长的名可以设置别名。例如将personMapper.xml中的resultType的“org.ruangong.entity.Person”设置为“person”。

    打开conf.xml文件,在<configuretion>标签下添加标签:<settings></settings>

    <!-- 设置单个别名 -->
    	<typeAliases>
    		<typeAlias type="org.ruangong.entity.Person" alias="person"/>
    	</typeAliases>
    

      不区分大小写,就是说虽然设置为person,在resultType=“PerSoN”,依然可以。

    四、Mybatis自带类型处理器

    创建转换器需要实现接口

    创建类,继承BaseTypehanlder:

    public Object getNullableResult(ResultSet arg0, String arg1) throws SQLException {
    		// TODO Auto-generated method stub
    		return null;
    	}//数据库-java
    public void setNonNullParameter(PreparedStatement arg0, int arg1, Object arg2, JdbcType arg3) throws SQLException {
    		// TODO Auto-generated method stub
    		
    	}//JAVA-数据库
    

      t约定:java中为true为男性,false为女性,对应数据库为1和0,在数据库中新增sex列默认值为0。

    在personMapper.xml中添加数据库操作:

    <!-- 使用转换器 -->
    	  <select id="queryone_converter" resultMap="personResult" parameterType="int">
    	  	select * from person where id = #{id}
    	  </select>
    	  <resultMap type="person" id="personResult">
    	  	<id property="id" column="id"/>
    	  	<result property="name" column="name"/>
    	  	<result property="age" column="age"/>
    	  	<result property="persex" column="sex" javaType="boolean" jdbcType="INTEGER"/>
    	  </resultMap>
    

      在select标签中,如果返回值与java实体类定义的数据类型不相同,返回值写成“resultMap”,然后在下面添加标签<resultMap>

    在定义接口中定义方法Person queryone_converter(int id);

    在测试类中测试。

     以上是数据库->java中转换的操作:

    一下是java->数据库,修改数据库的操作:

    若要添加一个人的信息,在java中输入信息:id=3,name="靳--",age=21,sex=true,到数据库中则是id=3,name="靳--",age=21,sex=1

    在personMapper.xml中添加数据库操作。

    <insert id="addone_converter" parameterType="person">
    	  insert into person(id,name,age,sex) value(#{id},#{name},#{age},#{persex,javaType=boolean,jdbcType=INTEGER})
    	  </insert>
    

      此时没有返回值不需要写resultMap,只是在数据库语句中添加转换就行。#{persex,javaType=boolean,jdbcType=INTEGER})

    resultMap可以实现两个功能:

    1、类型转换

    2、属性和字段的映射关系

    当需要对类和表进行映射关系时使用resultMap。

    五、parameterType;

    #{key}会给key值加上单引号'',可以防止sql注入

    ${key}原样输出key

  • 相关阅读:
    WPF 使用 Direct2D1 画图 绘制基本图形
    WPF 使用 Direct2D1 画图 绘制基本图形
    dot net core 使用 IPC 进程通信
    dot net core 使用 IPC 进程通信
    win2d 图片水印
    win2d 图片水印
    Java实现 LeetCode 240 搜索二维矩阵 II(二)
    PHP closedir() 函数
    PHP chroot() 函数
    PHP chdir() 函数
  • 原文地址:https://www.cnblogs.com/jccjcc/p/13959829.html
Copyright © 2011-2022 走看看