1.Mybatis基本环境搭配

来源:互联网 发布:大学生刷题软件 编辑:程序博客网 时间:2024/06/05 11:01
1.配置主文件
<?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属性引入java的properties配置文件 --><properties resource="jdbc.properties"><!-- <property name="driver.classname" value="com.mysql.jdbc.Driver"/> --></properties><!-- 指定生成别名的包 --><typeAliases><!-- com.rsy.bean包下的类生成别名(类的不完全限定名,类的短名) --><package name="com.rsy.bean"/><!-- 自定一个别名 --><!-- <typeAlias type="com.rsy.bean.Computer" alias="computer"/> --></typeAliases><!-- environments用于配置mybatis的数据库信息default指定默认的environment,对应到environment的id --><environments default="mysql"><environment id="mysql"><!-- JDBC:一般的默认值,使用JDBC控制事务提交和回滚。MANAGED:相较JDBC方式,为事务管理的rollback()和commit ()方法提供了空实现,并不使用JDBC控制事务提交回滚(rollback无法回滚操作),适合由其他容器(比如 Spring 或 JEE 应用服务器的上下文)来管理事务的整个生命周期。默认MANAGED会关闭Connection连接,如果不希望这样, 则可将closeConnection属性设置为false 。 --><transactionManager type="JDBC"></transactionManager><!-- UNPOOLED : 不使用连接池,普通JDBC,每次获得和关闭连接 POOLED:数据库连接池,常用方案JNDI:使用JNDI获取数据源 --><dataSource type="POOLED"><property name="driver" value="${driver.classname}"/>      <property name="url" value="${url}"/>      <property name="username" value="${user}"/>      <property name="password" value="${password}"/>            <!-- POOLED数据库连接池可选参数 --><!-- 最大连接数,默认10 --><property name="poolMaximumActiveConnections" value="3" /><!-- 最大空闲数,默认5 --><property name="poolMaximumIdleConnections" value="1" /><!-- 连接失效的时间,默认20000ms(当连接用尽后,将强制返回使用时间大于指定值的连接) --><property name="poolMaximumCheckoutTime" value="200000" /><!-- 获取连接的等待超时时间,默认20000ms --><property name="poolTimeToWait" value="200000" />      </dataSource></environment></environments><mappers><!-- 引入映射文件 --><mapper resource="com/rsy/mapper/computerMapper.xml"/><!-- 如果dao使用的是mybatis的注解添加sql则需要将mapper的class属性指定到dao接口 --><!-- <mapper class="com.rsy.mapper.ComputerDao"/> --><!--  --> <mapper/> <!-- 指定添加了mybatis注解的dao所在的包 --><!--  <package name="com.rsy.mapper"/> --></mappers></configuration>

2.引入idbc.propertic文件

#jdbc连接信息#driver.classname=oracle.jdbc.driver.OracleDriver#url=jdbc:oracle:thin:@127.0.0.1:1521/orcl#user=scott#password=123#mysql#driver.classname=com.mysql.jdbc.Driver#url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8#user=root#password=root

3.映射文件

<?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"><!-- mapper的namespace对应一个dao接口 --><mapper namespace="com.rsy.mapper.ComputerDao"><!-- 自定义ResultMaptype:对应POJO类名id:指定一个id,用于给其他sql引用 --><resultMap type="Computer" id="computer_map"><id property="id" column="id" jdbcType="INTEGER" javaType="int"/><result property="cname" column="computer_name"/><result property="produceDate" column="produce_date"/><result property="price" column="price"/></resultMap><!-- select、insert、update、delete标签中的id属性对应到dao接口中的方法名返回自动生成的主键useGeneratedKeys="true"keyColumn="id" 自动生成的主键列名keyProperty="id" 自动生成主键列对应的属性 --><insert id="add" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="Computer">insert into tb_computer(computer_name,produce_date,price)values(#{cname},#{produceDate},#{price})</insert><!-- <insert id="">oracle数据库获取主键值<selectKey keyProperty="id" resultType="int" order="BEFORE" >select sq.nextVal() from dual</selectKey>insert into tb_computer(computer_name,produce_date,price)values(#{cname},#{produceDate},#{price})</insert> --> <!-- 在查询是,mybatis默认情况是列名和属性名要一样,否则无法为POJO的属性赋值 --> <select id="queryById" resultMap="computer_map"> select id,computer_name ,produce_date,price from tb_computer where id = #{id,javaType=int,jdbcType=INTEGER} </select>  <!-- 使用map进行传参 parameterType="map"  --> <select id="queryByCondition" parameterType="map" resultType="Computer"> select id,computer_name cname,produce_date produceDate,price from tb_computer where id = #{id} </select>  <!-- 在使用sqlSession的api时,获取参数值是通过OGNL表达式获取,获取的参数名实际是对应到map的key或者是实体类的属性名 --> <select id="queryAll" parameterType="map" resultMap="computer_map"> select * from tb_computer order by ${order} desc </select>  <sql id="computer_cols"> computer_name,produce_date,price </sql> <sql id="computer_cols_all"> id,computer_name,produce_date,price </sql>   <!--  queryByParams  -->  <select id="queryByParams"  resultMap="computer_map">  <![CDATA[  select * from tb_computer where computer_name like concat('%',#{computer.cname},'%')  and produce_date <= #{computer.produceDate}  and price >= #{computer.price}  ]]>  </select></mapper>

4.对应的Dao文件

package com.rsy.mapper;import java.util.Date;import java.util.List;import java.util.Map;import org.apache.ibatis.annotations.Param;import com.rsy.bean.Computer;public interface ComputerDao {public void add(Computer computer);public Computer queryById(int id);public Computer queryByCondition(Map<String, Object> condition);public List<Computer> queryAll(Map<String, Object> map) ;public List<Computer> queryByParams(@Param("computer")Computer computer);}

5.测试类

package com.rsy.util;import java.io.IOException;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SqlSessionUtil {private static SqlSessionFactory factory = null;public static SqlSession openSession() {InputStream in = null;SqlSession session = null;try {/* * org.apache.ibatis.io.Resources * 用于读取资源文件,这是mybatis提供的一个很好用的帮助类 */in = Resources.getResourceAsStream("mybatis-config.xml");factory = new SqlSessionFactoryBuilder().build(in);session = factory.openSession();} catch (IOException e) {e.printStackTrace();}return session;}public static SqlSession openSession(boolean isAutoCommit) {InputStream in = null;SqlSession session = null;try {in = Resources.getResourceAsStream("mybatis-config.xml");factory = new SqlSessionFactoryBuilder().build(in);session = factory.openSession(isAutoCommit);} catch (IOException e) {e.printStackTrace();}return session;}}


package com.rsy.test;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import com.rsy.bean.Computer;import com.rsy.mapper.ComputerDao;import com.rsy.util.SqlSessionUtil;public class MapperTest {@Testpublic void test1() {SqlSession session = SqlSessionUtil.openSession();ComputerDao dao = session.getMapper(ComputerDao.class);System.out.println("dao: " + dao);System.out.println(dao instanceof ComputerDao);Map<String, Object> map = new HashMap<String,Object>();map.put("order", "id");List<Computer> list = dao.queryAll(map);System.out.println(list);}@Testpublic void test2() {SqlSession session = SqlSessionUtil.openSession();ComputerDao dao = session.getMapper(ComputerDao.class);List<Computer> list = dao.queryByParams(new Computer("电脑", new Date(), 3000));System.out.println(list);}}





原创粉丝点击