MyBatis-入门
1、项目结构:
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── xh
│ │ └── mybatisLearn
│ │ ├── bean
│ │ │ └── User.java
│ │ ├── dao
│ │ │ └── UserMapper.java
│ │ └── Test.java
│ ├── resources
│ │ ├── mapper
│ │ │ └── UserMapper.xml
│ │ └── mybatis
│ │ └── mybatis-config.xml
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xh.mybatisLearn</groupId>
<artifactId>mybatisLearn</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>mybatisLearn Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.wisdom-framework</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34_1</version>
</dependency>
</dependencies>
<build>
<finalName>mybatisLearn</finalName>
</build>
</project>
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>
<typeAliases>
<typeAlias type="com.xh.mybatisLearn.bean.User" alias="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://localhost/mybatisLearn"/>
<property name="username" value="mysql"/>
<property name="password" value="mysql"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
User.java:
package com.xh.mybatisLearn.bean;
/**
* Created by root on 2/27/18.
*/
public class User {
private int id;
private String username;
private int age;
//TODO
//没有这个构造方法会报错,而且int要改为Integer
public User(Integer id, String username, Integer age) {
this.id = id;
this.username = username;
this.age = age;
}
public User(String username, int age) {
this.username = username;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
'}';
}
}
后来发现不是一定要有这个这个构造器,因为如果属性非常多的话不是很蛋疼,而且有涉及基本类型向引用类型转化的问题。猜想可能是MyBatis利用反射在创建对象或是操作对象属性。那么就一定要有无参的构造器。所以把User(Integer id, String username, Integer age)改成无参就可以啦。
UserMapper.java :
package com.xh.mybatisLearn.dao;
import com.xh.mybatisLearn.bean.User;
import java.util.List;
/**
* Created by root on 2/27/18.
*/
public interface UserMapper {
List<User> getAll();
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="com.xh.mybatisLearn.dao.UserMapper">
<select id="selectUser" resultType="User">
select * from user_tb where id = #{id}
</select>
<select id="getAll" resultType="User">
select * from user_tb
</select>
<insert id="addUser" useGeneratedKeys="true"
keyProperty="id">
insert into user_tb (username,age) VALUES (#{username},#{age})
</insert>
</mapper>
注意: namespace="com.xh.mybatisLearn.dao.UserMapper",这个对应接口,下面的id对应方法名。
Test.java:
package com.xh.mybatisLearn;
import com.xh.mybatisLearn.bean.User;
import com.xh.mybatisLearn.dao.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* Created by root on 2/27/18.
*/
public class Test {
private static SqlSessionFactory sqlSessionFactory;
private static SqlSessionFactory getSqlSessionFactory() {
String resource = "mybatis/mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}
public static void main(String[] args) {
sqlSessionFactory = getSqlSessionFactory();
addOne();
getAll();
}
private static void getAll() {
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getAll();
for (User u : userList
) {
System.out.println("getAll>>" + u.toString());
}
} finally {
sqlSession.close();
}
}
private static void addOne() {
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User u1 = new User("u1", 21);
userMapper.addUser(u1);
//TODO
sqlSession.commit();
} finally {
sqlSession.close();
}
}
}
注意:sqlSession.commit();
源码:DefaultSqlSessionFactory.class
public SqlSession openSession() {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
}
public SqlSession openSession(boolean autoCommit) {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, autoCommit);
}
autoCommit 默认是false,我们可以指定true。

浙公网安备 33010602011771号