userMapperTest.java
package org.huse.mapper;import junit.framework.TestCase;
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.huse.pojo.User;import java.io.InputStream;public class UserMapperTest extends TestCase {UserMapper userMapper = null;SqlSession sqlSession = null;public void setUp() throws Exception {// 1.读mybatis核心配置文件InputStream rs = Resources.getResourceAsStream("mybatis-config.xml");// 2.创建sqlSessionFactoryBuilder对象来构建工厂对象SqlSessionFactory build = new SqlSessionFactoryBuilder().build(rs);// 3.通过工厂对象来创建sqlSession对象操作数据库sqlSession = build.openSession();//获取接口的动态代理对象userMapper = sqlSession.getMapper(UserMapper.class);}public void testFindById() {User user = userMapper.findById(1);System.out.println(user);sqlSession.close();}public void testaddUser() {User user = new User();user.setUage(20);user.setUserName("小红");//主键自增,这时不用我们自己插入值了//user.setUid(3);System.out.println("数据插入前用户的ID:"+user.getUid());userMapper.addUser(user);System.out.println("数据插入后用户的ID:"+user.getUid());//在上面openssion没有指定true,所以事务需要我们手动提交sqlSession.commit();sqlSession.close();}
}
User.java
package org.huse.pojo;public class User {private Integer uid;//private String uname;//驼峰命名private String userName;private Integer uage;@Overridepublic String toString() {return "User{" +"uid=" + uid +", userName='" + userName + '\'' +", uage=" + uage +'}';}public Integer getUid() {return uid;}public void setUid(Integer uid) {this.uid = uid;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public Integer getUage() {return uage;}public void setUage(Integer uage) {this.uage = uage;}
}
UserMapper.java
package org.huse.mapper;import org.huse.pojo.User;import java.util.List;/*接口式开发:方法的名称要和映射文件中的sql语句中的statmentId一致*/
public interface UserMapper {public User findById(int id);public void addUser(User user);}
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="org.huse.pojo.User">--><!--接口引入-->
<mapper namespace="org.huse.mapper.UserMapper"><!--
resultType="User" 表示这个查询的结果将会被映射到 User 类型的对象上。
确保所指定的类型与查询结果的结构相匹配是很重要的,这样可以正确地将数据库中的数据转换为应用程序中使用的对象。--><!--id="findById"意味着你为这个特定的查询操作定义了一个名为findById的标识符。--><select id="findById" parameterType="int" resultType="user">select uid, user_name, uage from users where uid = #{id}</select><!--主键回显,useGeneratedKeys="true" keyProperty="uid" 适用于主键自增情况--><!--<insert id="addUser" parameterType="user" useGeneratedKeys="true" keyProperty="uid">INSERT into users(uid, user_name, uage) values (null,#{userName},#{uage})</insert>--><!--适用于主键自增不自增状态--><insert id="addUser" parameterType="user" ><selectKey keyProperty="uid" resultType="Integer" order="BEFORE">/*下面这条语句表示查询插入后自增的主键值,支持主键自增,这个order是after*//*SELECT LAST_INSERT_ID()*/<!--第二种不支持主键自增,因为他不会自增,所以order为BEFORE,RAND表示是一个随机数,并且这个时候uid改为id-->SELECT FLOOR(RAND()*1000+1)</selectKey>INSERT into users(uid, user_name, uage) values (#{uid},#{userName},#{uage})</insert></mapper>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 引入外部文件 --><properties resource="application.properties"></properties><settings><!--开启全局缓存,默认是true--><setting name="cacheEnabled" value="true"/><!--开启全局懒加载,默认是false--><setting name="lazyLoadingEnabled" value="true"></setting><!--开启关联属性的懒加载,默认是false--><setting name="aggressiveLazyLoading" value="true"></setting><!--开启驼峰--><setting name="mapUnderscoreToCamelCase" value="true"></setting></settings><!--设置别名第一种方式--><!--<typeAliases><typeAlias type="org.huse.pojo.User" alias="user"></typeAlias></typeAliases>--><!--设置别名第二种方式,不区分大小写--><typeAliases><package name="org.huse.pojo"/></typeAliases><!-- 数据源环境配置 --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${mysql.driver}"/><property name="url" value="${mysql.url}"/><property name="username" value="${mysql.username}"/><property name="password" value="${mysql.password}"/></dataSource></environment></environments><mappers><!--配置UserMapper.xml文件的位置--><!--<mapper resource="mapper/UserMapper.xml"/>--><!--第三种配置:配置接口的全路径此处mapper配置目的::将mapper.xml映射文件交给mybatismapper映射文件路径=位置+映射文件名则需要满足规范1、映射文件的位置必须放在接口的同包目录下2、映射文件名必须和接口名相同--><!--<mapper class="org.huse.mapper.UserMapper"/>--><!--第四种配置方式,如果有很多映射文件,第三种就不太适用了,于是我们用包名引入--><package name="org.huse.mapper"/></mappers></configuration>
UserTest.java
package org.huse;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.huse.pojo.User;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;public class UserTest {@Testpublic void findById() throws IOException {// 1.读mybatis核心配置文件InputStream rs = Resources.getResourceAsStream("mybatis-config.xml");// 2.创建sqlSessionFactoryBuilder对象来构建工厂对象SqlSessionFactory build = new SqlSessionFactoryBuilder().build(rs);// 3.通过工厂对象来创建sqlSession对象操作数据库SqlSession sqlSession = build.openSession();// 4.执行查询操作,主要statementId的值User user = sqlSession.selectOne("org.huse.mapper.UserMapper.findById", 1);System.out.println(user);// 关闭事务,将数据源连接还给连接池sqlSession.close();}}