myBatis系列之二:以接口方式交互数据

本文介绍如何使用MyBatis通过接口和XML文件相结合的方式进行数据库操作,包括搭建环境、编写接口定义、配置XML文件及测试方法等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        myBatis系列之一:搭建开发环境是采用SqlSession的通用方法并强制转换的方式,存在着转换安全的问题: 

User user = (User) session.selectOne("com.bijian.study.model.UserMapper.getUserById", 1);

        可以采用接口加sql语句的方式来解决,sql语句理解为是接口的实现: 

一.新建接口类

package com.bijian.study.dao;

import java.util.List;

import com.bijian.study.model.Article;
import com.bijian.study.model.User;

public interface IUserMapper {

    User getUserById(int id);
}

 

二.修改User.xml文件

        确保namespace属性值和接口的全限定名相同,且id属性值和接口方法名相同: 

<?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="com.bijian.study.dao.IUserMapper">
	<select id="getUserById" parameterType="int" resultType="User">
		select *
		from `user` where id = #{id}
	</select>
</mapper>

 

三.在MyBatisBasicTest类中添加测试方法

@Test
public void queryInInterfaceWayTest() {
	
	SqlSession session = sqlSessionFactory.openSession();
	// 如果namespace和接口全限定名不一致,报org.apache.ibatis.binding.BindingException: Type interface com..IUserMapper is not known to the MapperRegistry异常。  
	IUserMapper mapper = session.getMapper(IUserMapper.class);
	User user = mapper.getUserById(1);
	log.info("{}:{}", user.getName(), user.getAddress());
}

 

附: 

        上面的实现是把sql语句放在XML文件中,并通过一定的约束来保证接口能够在XML中找到对应的SQL语句;还有一种方式是通过接口+注解SQL方式来交互数据: 

1.新建接口类

package com.bijian.study.dao;

import org.apache.ibatis.annotations.Select;

import com.bijian.study.model.User;

public interface IUserMapper2 {

    @Select({ "select * from `user` where id = #{id}" })
    User getUserById(int id);
}

 

2.在Configuration.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="com.bijian.study.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://10.60.222.65:3306/test" />
			<property name="username" value="test" />
			<property name="password" value="test" />
		</dataSource>
	  </environment>
	</environments>
	
	<mappers><!-- ORM映射文件 -->
		<mapper class="com.bijian.study.dao.IUserMapper2" />
	</mappers>
</configuration>

        或在初始化语句中加入: 

sqlSessionFactory.getConfiguration().addMapper(IUserMapper2.class);  

        如下所示:

@BeforeClass
public static void initial() {
	try {
		reader = Resources.getResourceAsReader("Configuration.xml");
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		sqlSessionFactory.getConfiguration().addMapper(IUserMapper2.class);
	} catch (IOException e) {
		log.error("Error thrown while reading the configuration: {}", e);
	} finally {
		if (reader != null) {
			try {
				reader.close();
			} catch (IOException e) {
				log.error("Error thrown while closing the reader: {}", e);
			}
		}
	}
}

 

3.相应修改上面的测试方法 

@Test
public void queryInInterfaceWayTest2() {
	
	SqlSession session = sqlSessionFactory.openSession();
	// 如果namespace和接口全限定名不一致,报org.apache.ibatis.binding.BindingException: Type interface com..IUserMapper is not known to the MapperRegistry异常。  
	IUserMapper2 mapper = session.getMapper(IUserMapper2.class);
	User user = mapper.getUserById(1);
	log.info("{}:{}", user.getName(), user.getAddress());
}

 

文章来源:http://czj4451.iteye.com/blog/1980569

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值