项目结构
添加Maven依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<build>
<finalName>maven_base</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
全局配置文件
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>
<!-- 使用外部配置文件db.properties -->
<properties resource="db.properties"></properties>
<settings>
<!-- 开启驼峰-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 别名 -->
<typeAliases>
<package name="com.pojo"></package>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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 resource="com/dao/UserMapper.xml"/>-->
<package name="com.dao"></package>
</mappers>
</configuration>
db.properties文件
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql:///base_learn?useSSL=false&useUnicode=true&characterEncoding=UTF-8
jdbc.username = root
jdbc.password = 123456
pojo、dao以及xml
public class User {
private Integer id;
private String username;
private String email;
private String addr;
public User() { }
public User(String username, String email, String addr, Dept dept) {
this.username = username;
this.email = email;
this.addr = addr;
this.dept = dept;
}
//get set省略
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + email + '\'' +
", addr='" + addr + '\'' +
'}';
}
}
dao:
public interface UserMapper {
/**
* 添加用户
* @param user
* @return
*/
int save(User user);
/**
* 删除用户
* @param id
* @return
*/
int delete(Integer id);
/**
* 更新用户
* @param user
* @return
*/
int update(User user);
/**
* 查询用户
* @param id
* @return
*/
User findById(Integer id);
/**
* 根据参数获取用户集合
* @param user
* @return
*/
List<User> getList(User user);
}
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接口 -->
<mapper namespace="com.dao.UserMapper">
<insert id="save">
INSERT INTO t_user(username,email,addr) VALUES(#{username},#{email},#{addr})
</insert>
<delete id="delete" parameterType="integer">
delete from t_user where id = #{id}
</delete>
<update id="update" parameterType="User">
UPDATE t_user SET
username = #{username},
email = #{email},
addr = #{addr}
WHERE id = #{id}
</update>
<select id="findById" resultType="com.pojo.User">
select id, username, email, addr from t_user where id = #{id} limit 1
</select>
<!-- 因为定义了别名,所以这里可以直接使用user-->
<select id="getList" parameterType="User" resultType="User">
select id, username, email, addr from t_user where username = #{username}
</select>
</mapper>
测试以及使用
public class DruidTest {
static SqlSessionFactory sqlSessionFactory = null;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
//创建SqlSessionFactory对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void getList() {
//每个线程都拥有一个sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("com.dao.UserMapper.getList", new User() {{
setUsername("cyz");
}});
System.out.println(userList);
sqlSession.close();
}
@Test
public void insert(){
//每个线程都拥有一个sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("com.dao.UserMapper.save", new User() {{
setUsername("b");
setEmail("2@qq.com");
setAddr("quanzhou");
}});
sqlSession.commit();
sqlSession.close();
}
@Test
public void delete(){
//每个线程都拥有一个sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("com.dao.UserMapper.delete", 1);
sqlSession.commit();
sqlSession.close();
}
@Test
public void findById(){
//每个线程都拥有一个sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.selectOne("com.dao.UserMapper.findById", 1);
sqlSession.close();
}
@Test
public void update(){
//每个线程都拥有一个sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.update("com.dao.UserMapper.update", new User() {{
setId(1);
setUsername("a");
setEmail("2@qq.com");
setAddr("xiamen");
}});
sqlSession.commit();
sqlSession.close();
}
}
注解代替xml(不推荐)
- @Insert
- @Delete
- @Update
- @Select
一般就是写在dao接口对应方法上方
@Insert("INSERT INTO t_user(username,email,addr) VALUES(#{username},#{email},#{addr})")
int save(User user);
还有Provider注解:
- @InsertProvider,@DeleteProvider,@UpdateProvider, @@SelectProvider
就举个插入例子:
//type 指定Provider类,method指定对应方法
@InsertProvider(type = UserProvider.class, method = "insert")
int save(User user);
public class UserProvider {
//插入
public String insert(User user) {
String s = String.format("INSERT INTO t_user(username,email,addr) VALUES('%s','%s','%s')"
, user.getUsername()
, user.getEmail()
, user.getAddr());
System.out.println(s);
return s;
}
}