• MyBatis开发-->接口方式编程


    从本篇开始,引用借鉴博客:http://blog.csdn.net/techbirds_bao/article/details/9233599,里面是经典教程,但是有些纰漏。自己整理下,更加适合自己学习。

    在前一篇入门篇我们使用的是SqlSession来执行查询语句:

    User user = session.selectOne("User.selectUserById",1);

    在本篇开始之前我解释一下上面这句话的意思。我们打开UserMapper.xml文件,上面查询语句跟Mapper里面的对应关系如下:

    这是上篇没有说明的,以后要注意。后面的1是对应的user的id。

    从本篇开始我们会摒弃直接使用SqlSession来执行sql语句,会使用接口的方式来进行sql语句的执行,这样更简洁,更安全。

    为了更好的配合本文,现将开篇的表结构进行修改,最终的建表语句如下:

    CREATE TABLE `t_user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user_name` varchar(50) DEFAULT NULL,
    `user_age` int(3) DEFAULT NULL,
    `user_address` varchar(200) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    

    然后插入一两条数据:

    我们将项目迁移到eclipse里面,当然你也可以继续使用myeclipse,具体结构如下:

    在本篇,我们将上篇里的配置文件mybatis-config.xml换成了configuration.xml,配置信息都基本一样,只是增加了一个类别名的设置,为了让大家明了,将xml代码全部贴出来:

    <?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>
    	<!-- 设置实体类的别名 -->
    	<typeAliases>
    		<typeAlias alias="user" type="cn.clear.mybatis.model.User"/>
    	</typeAliases>
    	<!-- 配置数据库信息 -->
    	<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://127.0.0.1:3306/mybatis"/>
    				<property name="username" value="root"/>
    				<property name="password" value="root"/>
    			</dataSource>
    		</environment>
    	</environments>
    	<!-- 映射文件 -->
    	<mappers>
    		<mapper resource="cn/clear/mybatis/model/UserMapper.xml"/>
    	</mappers>
    </configuration>

    好,下面我们就依照上面的准备,开始往下走。

    在src_user源码目录下建立 cn.clear.mybaits.dao 这个包,并建立接口类 UserDao.java , 内容如下:

    package cn.clear.mybatis.dao;
    
    import java.util.List;
    
    import cn.clear.mybatis.model.Article;
    import cn.clear.mybatis.model.User;
    
    public interface UserDao {
    	
    	/**
    	 * 根据id查询user对象
    	 * @param id
    	 * @return
    	 */
    	public User selectUserById(Integer id);
    	
    	/**
    	 * 查询所有user
    	 * @return
    	 */
    	public List<User> selectAllUser();
    }
    

    注意:上面dao类里面的方法名要与UserMapper.xml里面的id名一样,所以我们将UserMapper.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">
    <!-- 注意namespace里面关联的是UserDao的Qualified Name,这样才能使得Mapper文件与dao文件进行关联,才能顺利使用接口编程 -->
    <mapper namespace="cn.clear.mybatis.dao.UserDao">
    	<!-- 配置User实体类与表结构信息,为了适用结果为集合的类型匹配,这里的type之所以可以直接写user,
    	是因为我们在configuration.xml文件里配置了类的别名 -->
    	<resultMap type="user" id="resultListUser">
    		<id property="id" column="id" />
    		<result property="userName" column="user_name"/>
    		<result property="userAge" column="user_age"/>
    		<result property="userAddress" column="user_address"/>
    	</resultMap>
    	
    	<!-- 根据id查询user,其中id是唯一的并且对应UserDao类的方法名,parameterType对应的是参数类型,这里的参数是主键,主键的类型是int,
    	resultType表示返回的结果,但是我在使用resultType="user"时返回的总是null值,所以在不得治的时候我选择了使用resultMap。 -->
    	<select id="selectUserById" parameterType="int" resultMap="resultListUser">
    		select * from t_user where id = #{id,jdbcType=INTEGER}
    	</select>
    	<!-- 查询所有user,因为实际项目需要,这里使用的是倒序查询 -->
    	<select id="selectAllUser" resultMap="resultListUser">
    		select * from t_user order by id desc
    	</select>
    </mapper>
    

    配置好了之后,我们在UserTest.java类里面测试一下:

    package cn.clear.mybatis.test;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.List;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import cn.clear.mybatis.dao.UserDao;
    import cn.clear.mybatis.model.Article;
    import cn.clear.mybatis.model.User;
    
    /**
     * 测试mybatis
     * @author clear
     *
     */
    public class UserTest {
    	//定义sessionFactory属性
    	private static SqlSessionFactory sessionFactory;
    	private static Reader reader;
    
    	static{
    		
    		try {
    			//读取配置文件信息
    			reader = Resources.getResourceAsReader("configuration.xml");
    			//构建sessionFactory
    			sessionFactory = new SqlSessionFactoryBuilder().build(reader);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public static void main(String[] args) {
    		findUserByIdAndFindAllUser();
    	}
    
    	public static void findUserByIdAndFindAllUser() {
              //根据sessionFactory打开SqlSession对象 SqlSession session = sessionFactory.openSession(); try{ //使用原始selectOne查询,注意方法里面表示Mapper文件的namespace下面id为selectUserById的查询语句 //User user = session.selectOne("cn.clear.mybatis.dao.UserDao.selectUserById",1); //使用dao接口查询 UserDao userDao = session.getMapper(UserDao.class);
                  //根据id查询一条记录 User user = userDao.selectUserById(1); System.out.println(user.getId()+" "+user.getUserName()+" "+user.getUserAge()+" "+user.getUserAddress()); System.out.println("------------------------感谢华丽丽的分割线-----------------------------");
                  //查询所有user List<User> userList = userDao.selectAllUser(); for (User u : userList) { System.out.println(u.getId()+" "+u.getUserName()+" "+u.getUserAge()+" "+u.getUserAddress()); } }finally{ session.close(); } } }

    然后我们执行此测试类,在console打印如下信息:  

    1 小子 26 广州天河万菱国际中心
    ------------------------感谢华丽丽的分割线-----------------------------
    2 小二 27 中国广州天河体育中心
    1 小子 26 广州天河万菱国际中心
    

    这样我们就顺利地使用了接口方式使用Mybatis进行查询。

  • 相关阅读:
    android activity声明周期学习笔记
    java笔记之static&final&abstract
    Android 动画分析学习笔记
    43:数据分类
    42:换汽水瓶ExchangeBottle
    41:简单密码
    40: Redraiment的走法(不连续最长子字符串)
    函数返回值是引用(引用当左值)
    引用的本质
    C语言实现计算字符串中最后一个单词长度,单词以空格隔开
  • 原文地址:https://www.cnblogs.com/clear5/p/5000866.html
Copyright © 2020-2023  润新知