三、用SQL映射语句用注解,dataSource用xml(不推荐)。
综合上面两节(一个用xml,一个用annotation),发现一个好玩儿的,SQL映射用注解方式,然后还是得有两个xml配置文件。
如果你不知道SQL映射怎么用注解方式,查看这篇:http://www.cnblogs.com/hyyq/p/6718449.html
当SQL语句用注解方式映射后,原来的XML映射文件可以这样写:
这是原来用xml映射SQL语句的方式(这里的mapper节点的 namespace和select节点下的id是自己定义的,
后面执行sqlSession时会用到的,例如:
//1.唯一标识符(namespace+id)
//2.执行sql需要用到的参数 Employee employee = openSession.selectOne("yyc.mybatis.EmployeeMapper.selectEmp", 1);
):
<?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="yyc.mybatis.EmployeeMapper"> <!-- resultType:返回类型 #{id}:从传递过来的参数中获取id值 --> <select id="selectEmp" resultType="yyc.mybatis.bean.Employee"> select id,last_name lastName,gender,email from tb1_employee where id = #{id} </select> </mapper>
当我们的SQL映射用注解实现后,我们可以将上面这个sql映射文件改一下
这时的namespace的值是一个具体存在的值,也就是作SQL映射的java接口:
<?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="yyc.mybatis.mapper.EmployeeMapper"> </mapper>
同样需要在全局配置文件中注册sql映射文件,如下:
<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///mybatis"/> <property name="username" value="root"/> <property name="password" value="123"/> </dataSource> </environment> </environments> <!-- 将我们写好的sql映射文件注册到全局配置文件中 --> <mappers> <!-- annotation映射配置方式 --> <mapper resource="EmployeeMapperAnnotation.xml"/> </mappers> </configuration>
测试:
测试方法与初探MyBatis之HelloWorld(二)一样,这里为了区分,我们查询第二条数据:
@Test public void testAnnotation() throws IOException{ SqlSessionFactory sqlSessionFactory = MySqlSessionFacoty.getSqlSessionFactory(); //2.获取sqlSession实例,能直接执行已经映射的sql语句 SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); Employee employee = mapper.selectOne(2); System.out.println(employee); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { openSession.close(); } }
输出:
Employee [id=2, lastName=mark, gender=1, email=bb@163.com]