mapper代理的方式

mapper接口(dao接口)需要遵循的规范:

  1. 在mapper.xml中,namespace等于mapper接口地址
  2. mapper接口中的方法名和mapper.xml中statement的id一致
  3. mapper接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致
  4. mapper接口中的方法返回值类型和mapper.xml中的statement的resultType指定的类型一致

遵循这些规范后,mybatis会自动生成mapper接口实现类代理对象,简化了开发

mapper接口和mapper.xml放在同一目录(方便主配置文件使用package批量扫描mapper.xml)

SqlMapConfig.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>
	<!-- 加载属性文件,获取连接池参数 -->
	<properties resource="db.properties"></properties>
	<!-- 定义别名,包扫描方式,批量,,可以简化mapper.xml文件中参数的书写 -->
	<typeAliases>
		<package name="com.mybatis.model"/>
	</typeAliases>
	
	<environments default="development">
			<environment id="development">
				<!-- 事务 -->
				<transactionManager type="JDBC"></transactionManager>
				<!-- 连接池 -->
				<dataSource type="POOLED">
					<property name="driver" value="${jdbc.driver}"/>
			        <property name="url" value="${jdbc.url}"/>
			        <property name="username" value="${jdbc.username}"/>
			        <property name="password" value="${jdbc.password}"/>
				</dataSource>
			</environment>
	</environments>
	
	<mappers>
		<!-- mapper代理的方式,并且mapper接口和.xml在同一目录 -->
		<package name="com.mybatis.dao"/>
	</mappers>


</configuration>

UserMapper.java接口

package com.mybatis.dao;

import com.mybatis.model.User;

public interface UserMapper {

	//根据id查询user
	public User findUserById(int id) throws Exception;
}

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">
<mapper namespace="com.mybatis.dao.UserMapper">
	
	<select id="findUserById" parameterType="int" resultType="user">
		select * from user where id=#{id}
	</select>

</mapper>

测试方法

package com.mybatis.test;

import java.io.IOException;
import java.io.InputStream;

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 org.junit.Before;
import org.junit.Test;

import com.mybatis.dao.UserMapper;
import com.mybatis.model.User;

public class MapperTest {

	private SqlSessionFactory sqlSessionFactory;
	@Before
	public void before() throws IOException{
		//主配置文件路径
		String resource = "config/SqlMapConfig.xml";
		InputStream is = Resources.getResourceAsStream(resource);
		sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
	}
	
	@Test
	public void test() throws Exception {
		SqlSession session = sqlSessionFactory.openSession();
                //根据接口获取代理对象
		UserMapper mapper = session.getMapper(UserMapper.class);
		User user = mapper.findUserById(41);
		System.out.println(user);
	}
}

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatisdb
jdbc.username=root
jdbc.password=123456

log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

猜你喜欢

转载自blog.csdn.net/weixin_38503726/article/details/86478899
今日推荐