接口的实现类由mybatis动态生成:
1.动态代理 2.javassist动态代理

<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.usergroupId>
<artifactId>mybatis_002_usersartifactId>
<version>1.0version>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.26version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.6version>
dependency>
dependencies>
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.xmlinclude>
<include>**/*.propertiesinclude>
includes>
resource>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.xmlinclude>
<include>**/*.propertiesinclude>
includes>
resource>
resources>
build>
project>
DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties">properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
settings>
<typeAliases>
<package name="com.user.pojo"/>
typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
dataSource>
environment>
environments>
<mappers>
<mapper class="com.user.mapper.UsersMapper">mapper>
<package name="com.user.mapper">package>
mappers>
configuration>
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.user.mapper.UsersMapper">
<select id="getAll" resultType="user">
select id,username,birthday,sex,address
from users;
select>
<select id="getById" parameterType="Integer" resultType="user">
select id,username,birthday,sex,address
from users
where id = #{id};
select>
<select id="getByName" parameterType="String" resultType="user">
select id,username,birthday,sex,address
from users
where username like "%${name}%";
select>
<update id="update" parameterType="user">
/*这里的参数是user类中的属性*/
update users set username = #{userName},birthday = #{birthday},sex = #{sex},address = #{address}
where id = #{id};
update>
<insert id="insert" parameterType="user">
/*这里的参数是user类中的属性*/
insert into users(id,username,birthday,sex,address) value(#{id},#{userName},#{birthday},#{sex},#{address});
insert>
<delete id="delete" parameterType="Integer">
delete from users where id = #{id};
delete>
mapper>
package com.user.mapper;
import com.user.pojo.User;
import java.util.List;
/*数据访问层的接口,规定了数据库中可进行的各种操作*/
public interface UsersMapper {
//查询全部用户信息
List<User> getAll();
//根据用户主键查用户
User getById(int id);
//根据用户名模糊查询
List<User> getByName(String name);
//更新用户信息
int update(User user);
//增加用户
int insert(User user);
//根据主键删除用户
int delete(int id);
}
package com.user.pojo;
import java.util.Date;
public class User {
private Integer id;
private String userName;
private Date birthday;
private String sex;
private String address;
public User() {
}
public User(Integer id, String userName, Date birthday, String sex, String address) {
this.id = id;
this.userName = userName;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
public User(String userName, Date birthday, String sex, String address) {
this.userName = userName;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
package com.user;
import com.user.mapper.UsersMapper;
import com.user.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/*
*代码格式固定
*/
public class MyTest {
SqlSession sqlSession;
@Before
public void openSqlSession() throws IOException {
//第一步:使用IO流读取核心配置文件SqlMapConfig.xml
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//第二步:创建SqlSessionFactory工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//第三步:取出SqlSession的对象
sqlSession = factory.openSession();
}
@After
public void closeSqlSession(){
//第五步:关闭SqlSession对象(还回到数据库连接池)
sqlSession.close();
}
@Test
public void testGetAll(){
/*
不使用动态代理:通过xml文件属性名为getAll的标签获取执行sql语句
List list = sqlSession.selectList("clh.getAll");
list.forEach(user -> System.out.println(user));
*/
//取出动态代理对象
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
//调用接口的方法执行sql语句
List<User> list = usersMapper.getAll();
list.forEach(user -> System.out.println(user));
}
@Test
public void testgetById(){
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
User user = usersMapper.getById(1);
System.out.println(user.toString());
}
@Test
public void testgetByName(){
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
List<User> list = usersMapper.getByName("张");
list.forEach(user -> System.out.println(user));
}
@Test
public void testupdate() throws ParseException {
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
User user = new User(7,"王五",new SimpleDateFormat("yyyy-MM-dd").parse("2001-11-02"),"2","北京");
usersMapper.update(user);
sqlSession.commit();
}
@Test
public void testinsert() throws ParseException {
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
User user = new User(8,"李根儿",new SimpleDateFormat("yyyy-MM-dd").parse("1995-11-02"),"1","北京");
usersMapper.insert(user);
sqlSession.commit();
}
@Test
public void testdelete() throws ParseException {
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
usersMapper.delete(1);
sqlSession.commit();
}
}
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=*******
jdbc.password=*******