mapper接口(dao接口)需要遵循的规范:
- 在mapper.xml中,namespace等于mapper接口地址
- mapper接口中的方法名和mapper.xml中statement的id一致
- mapper接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致
- 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