首页 > 代码库 > 初探MyBatis之HelloWorld(三)

初探MyBatis之HelloWorld(三)

三、用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]

 

初探MyBatis之HelloWorld(三)