一、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>21 and id<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); } }