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

摘要:
从本文开始,我们将放弃直接使用SqlSession执行SQL语句,而使用interface方法执行SQL语句。这更简单、更安全--映射文件--˃˃OK,让我们开始按照上面的准备工作前进。在src_创建cn.clear.mybaits。dao包,并创建接口类UserDao。java,如下所示:packagecn.clear.mybaits。道;导入java.util。列表importcn.clear.mybatis.model。文章importcn.clear.mybatis.model。使用者PublicinterfaceUserDao{/***按id*@paramid*@return*/publicUserselectUserById查询用户对象;/***查询所有用户*@retain*/pubicListselectAllUser();}注意:上面dao类中的方法名应该与UserMapper中的ID名相同。xml,所以我们将使用UserMapper。还发布了xml代码:˂!

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

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

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

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

MyBatis开发-->接口方式编程第1张

这是上篇没有说明的,以后要注意。后面的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;

然后插入一两条数据:

MyBatis开发-->接口方式编程第2张

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

MyBatis开发-->接口方式编程第3张

在本篇,我们将上篇里的配置文件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   parameterType="int" resultMap="resultListUser">
		select * from t_user where id = #{id,jdbcType=INTEGER}
	</select>
	<!-- 查询所有user,因为实际项目需要,这里使用的是倒序查询 -->
	<select   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进行查询。

免责声明:文章转载自《MyBatis开发--&amp;gt;接口方式编程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UGUI_屏幕适配【学习】026 Zookeeper下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CodeSmith实用技巧(六):使用XML 属性

 CodeSmith允许我们存储元数据在XML文件中,然后在执行模版时直接打开XML文件填写到属性面板中。1.XML Property With a Schema  1<?xml version="1.0" encoding="UTF-8"?> 2<xs:schema targetNamespace=http://www.codesm...

C#操作Xml:通过XmlDocument读写Xml文档

什么是Xml? Xml是扩展标记语言的简写,是一种开发的文本格式。关于它的更多情况可以通过w3组织了解http://www.w3.org/TR/1998/REC-xml-19980210。如果你不知道它,那你就out太多了。 .Net是如何处理Xml的? 1.通过XmlDocument读写Xml文档 2.使用XmlReader读Xml,使用XmlW...

idea 配置mapper.xml代码提示

从代码跳转mapper文件的插件: 在mapper文件中添加dtd约束: 1、下载dtd约束文件 http://mybatis.org/dtd/mybatis-3-config.dtdhttp://mybatis.org/dtd/mybatis-3-mapper.dtd 2、手动导入dtd file-->settings-->Laguage&...

mybatis父查询值嵌套传递/column传入多个参数值197

mybatis中collection的column传入多个参数值(使用父查询的映射值) property description column 数据库的列名或者列标签别名。与传递给resultSet.getString(columnName)的参数名称相同。注意: 在处理组合键时,您可以使用column=“{prop1=col1,prop2=co...

三把利器快速制作代码帮助文档

1、前言相信不少麻油都已经积累了属于自己的代码库了,不知道是否有过这样的经历: A:听说你上次写了个通用XXX类库啊,我正好要用到,麻烦把dll发我一下。 B:好的,你等一下,我发给你。。。 。。。十分钟后 A:喂,你这个类是怎么用的啊,有没有帮助文档啊。 B:汗,没来得及做,我来和你说吧。。。 一个好用的类库,如果能配上一个好的说明文档(最好还带搜索功能...

java 读取 yaml 文件

做 java 项目用的最多的配置文件就是 properites 或者 xml, xml 确实是被用烂了,Struts, Spring, Hibernate(ssh) 无一不用到 xml。相比厚重的 xml, properites 要清爽许多,一般的项目自己需要的配置也足够使用。但 properties 只支持 key=value 这种形式的配置,如果再遇...