第一个文件(POJO):User.java
public class User {
private Long id;
private String name;
private String sex;
private int age;
public User() {
}
public User(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
}
第二个文件UserMapper.java
public interface UserMapper {
public void save(User user);
public User getUser(Long id);
}
第三个文件(配置文件)mybatis-config.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>
<settings>
<setting name="cacheEnabled" value="false"/>
<setting name="useGeneratedKeys" value="true"/>
<setting name="defaultExecutorType" value="REUSE"/>
</settings>
<typeAliases>
<typeAlias type="mybatis.User" alias="User"></typeAlias>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="jdbc"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/test"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
第四个文件(映射文件)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="mybatis.UserMapper">
<insert id="save" parameterType="User">
insert into "user"(name,age,sex) values(#{name},#{age},#{sex})
</insert>
<select id="getUser" parameterType="java.lang.Long">
SELECT * FROM "user" where id=#{id}
</select>
</mapper>
第五个文件(工具类)MybatisUtil.java
public class MyBatisUtil {
private final static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
第六个文件(测试类)TestMapper.java
public class TestMapper {
static SqlSessionFactory sqlSessionFactory= null;
static {
sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
}
@Test
public void testSave(){
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User("Tom","男",13);
userMapper.save(user);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
@Test
public void getUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUser(1L);
System.out.println("name:"+user.getName());
} finally {
sqlSession.close();
}
}
}
note (如果以上代码你直接copy过去的话,以下的问题似乎并不会出现….emmm就当做个记录吧):
1 配置文件和映射文件的文件头别搞混了,不然会报出莫名其妙的错误——Cause: org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 36; 必须为元素类型 “mapper” 声明属性 “namespace”。
2 配置文件里别把mapper忘了,不然就会报错——Type interface com.UserMapper is not known to the MapperRegistry(这个错误一般智商不会犯#捂脸#)