mybatis动态sql、存储过程、注解配置


一、mybatis核心配置:

  

<?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 >
   
    <properties resource="db.properties">
   
    </properties>
     
     <!-- 为实体对象起一个别名 -->
     <typeAliases >
      <typeAlias type="com.wa.mybatis.model.Users" alias="Users"/><!--
      <package name="com.wa.mybatis.model"/>
     --></typeAliases>
     
    <environments default="development" >
     <environment id="development"  >
      <transactionManager type="JDBC" />
    
      <dataSource type="POOLED"  >
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}" />
      </dataSource>
     
     </environment>
    
    </environments>
    
    <mappers>
    <mapper resource="com/wa/mybatis/dao/UserMapper.xml"/>
    
    <mapper resource="com/wa/mybatis/dao/UserSql.xml"/>
    <!-- 基于注解的配置 -->
    <mapper class="com.wa.mybatis.dao.UserAnnotationDao"/>
    </mappers>
   
   </configuration>

二、基于注解的dao:

import org.apache.ibatis.annotations.Select;

import com.wa.mybatis.model.Users;

public interface UserAnnotationDao {
    
    @Select("select * from users where id=#{id}")
    public Users getUserById(int id);

}

三、基于sql和存储过程的dao:

public interface UserSql {
    
    
    public int addUser(Users user);
    
    public List<Users> getUserByName(Users user);
    
    public String findNameById(Map<String,Object> map);

}

四、存储过程及其测试:

--存储过程
CREATE OR REPLACE PROCEDURE TEST_1 (t_id IN INTEGER ,t_name OUT VARCHAR)
IS 
BEGIN 
  
 SELECT NAME INTO T_NAME FROM USERS WHERE ID= T_ID;
 DBMS_OUTPUT.put_line(T_NAME);
 
 END;

 --测试存储过程
 DECLARE 
  t VARCHAR2(20);

BEGIN 
  test_1(81,t);
END;
COMMIT;


五、UserSql.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">  
  <!--这块等于dao接口的实现  namespace必须和接口的类路径一样-->  
<mapper namespace="com.wa.mybatis.dao.UserSql">

    <sql id="param" >
     id,name,birth
     </sql>

    <insert id="addUser" parameterType="Users" >
    <!-- 引用其他的sql片段 
     中间的sql语句不加分号结尾,否则抛出异常
    -->
    <selectKey keyColumn="id" keyProperty="id" resultType="int" order="BEFORE">
    select users_seq.nextval from dual
    </selectKey>
     insert into users (<include refid="param" />) values (#{id},#{name},#{birth})
    </insert>
    
    <!-- 条件查询语句 -->
    <select id="getUserByName" resultMap="list" parameterMap="map">
     select * from users where 1=1
     <if test="name!=null">
     and name like #{name}
     </if>
    <choose >
    <when test="id&gt;21 and id&lt;90">
       and id =81
    </when>
    
    <otherwise>
    and id = #{id}
    </otherwise>
       
    </choose>
    
    </select>
    
    <parameterMap type="Users"
     id="map">
     <parameter property="id" mode="IN" javaType="java.lang.Integer" />
     <parameter property="name" mode="IN" javaType="java.lang.String"/>
    </parameterMap>
    
    <resultMap type="Users" id="list">
     <id column="id" property="id"/>
     <result column="name" property="name"/>
     <result column="birth" property="birth"/>
    </resultMap>
    
    <!-- 调用存储过程 -->
      <!-- 一、第一种方式 -->
     <select id="findNameById" parameterType="java.util.Map"
     statementType="CALLABLE">
    {call test_1(#{id,jdbcType=INTEGER,mode=IN},#{name,jdbcType=VARCHAR,mode=OUT})}
     </select>
      
       <!--  第二种方式 -->
    <!--
       
    <select id="findNameById" parameterMap="callMap"
     statementType="CALLABLE">
    
      {CALL TEST_1(?,?)}
    </select>
   <parameterMap type="java.util.Map" id="callMap">
     <parameter property="id" mode="IN"  jdbcType="INTEGER"/>
     <parameter property="name" mode="OUT" jdbcType="VARCHAR"/>
    </parameterMap>
 
 
--></mapper>   
    
    

六、测试类:

package com.wa.mybatis.test;

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

import com.wa.mybatis.dao.UserAnnotationDao;
import com.wa.mybatis.dao.UserSql;
import com.wa.mybatis.model.Users;
import com.wa.mybatis.util.SessionFactoryUtil;

public class Test2 {
    /**
     * 基于注解的配置
     * @throws IOException
     */
    @Test
    public void test1() throws IOException{
        SqlSessionFactory sessionFactory = SessionFactoryUtil.getFactory();
        SqlSession session = sessionFactory.openSession();
        UserAnnotationDao dao = session.getMapper(UserAnnotationDao.class);
        Users user = dao.getUserById(81);
        System.out.println(user);
    }
    
    /**
     * sql片段的引用
     * @throws IOException
     */
    @Test
    public void test2() throws IOException{
        SqlSessionFactory sessionFactory = SessionFactoryUtil.getFactory();
        SqlSession session = sessionFactory.openSession();
        UserSql dao = session.getMapper(UserSql.class);
        Users user = new Users();
        user.setBirth(new Date());
        user.setName("java");
        dao.addUser(user);
        session.commit();
        session.close();
        System.out.println(user);
    }
    
    /**
     * 条件查询
     * @throws IOException
     */
    @Test
    public void test3() throws IOException{
        SqlSessionFactory sessionFactory = SessionFactoryUtil.getFactory();
        SqlSession session = sessionFactory.openSession();
        UserSql dao = session.getMapper(UserSql.class);
        List<Users> list=dao.getUserByName(new Users(100,"%ja%",new Date()));
        System.out.println(list);
    }
    
    /**
     * 调用存储过程
     * @throws IOException
     */
    @Test
    public void test4() throws IOException{
        SqlSessionFactory sessionFactory = SessionFactoryUtil.getFactory();
        SqlSession session = sessionFactory.openSession();
        UserSql dao = session.getMapper(UserSql.class);
        Map<String,Object> map = new HashMap<String,Object>();
        String name=null;
        int id = 81;
        map.put("id",Integer.valueOf(id));
        dao.findNameById(map);
        //从map中取出对应的返回值 
         name=(String) map.get("name");
    
        System.out.println(name);
    }


}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM