1.环境搭建,pom.xml配置依赖jar
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
</dependencies>
新建数据库
create table t_user(
id int primary key auto_increment,
username varchar(11),
password varchar(11),
age int
)
创建对应的实体类User
package com.xf.pojo;
public class User {
private int id;
private String username;
private String password;
private int age;
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
'}';
}
}
添加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>
<!-- 配置MyBatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- POOLED配置JDBC数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://120.78.195.41:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="***"/>
<property name="password" value="***"/>
</dataSource>
</environment>
</environments>
<!--注册UserMapper.xml-->
<mappers>
<mapper resource="com/xf/mapper/UserMapper.xml"/>
</mappers>
</configuration>
myBatis开发有两种方式
1.使用原声接口
2.Mapper代理实现自定义接口
第一种:
(1)创建Mapper文件UserMapper.xml。
namespace通常设置为文件所在包名+文件名,但不是一定要这样设置,可以自定义,出于代码规范一般设置为包名+文件名的形式。
parameterType为参数数据类型。
resultType为返回值数据类型。
<?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.xf.mapper.UserMapper">
<select id="get" parameterType="int" resultType="com.xf.pojo.User">
select * from t_user where id=#{id}
</select>
</mapper>
(2)上面config里面的注册UserMapper
(3)测试类调用原生接口执行SQL语句获取结果。
package com.xf;
import com.xf.pojo.User;
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;
/**
* Unit test for simple App.
*/
public class AppTest {
public static void main(String[] args) throws IOException {
//加载mybatis配置文件
InputStream is=AppTest.class.getClassLoader().getResourceAsStream("config.xml");
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
//获取sqlSession
SqlSession session=factory.openSession();
//调用Mybatis原声接口执行SQL
//statement 为UserMapper.xml的namespace值+"."+select标签的id值
String statement="com.xf.mapper.UserMapper.get";
User user=session.selectOne(statement,1);
System.out.println(user);
}
}
结果:
提示:如果出现The error may exist in com/xf/mapper/UserMapper.xml错误,
问题:在编译后的target文件夹下,发现只有mapper的class文件,而没有xml文件,将对应的xml文件放到这个文件夹下运行就不会出现下面的错误。说明出现这个错误的原因是maven编译时没有将xml文件放进去。
解决方法:在pom.xml中添加如下代码
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
第二种:
我们在实际开发中,推荐使用第二种方式:自定义接口,但是不需要实现该接口,通过Mapper代理来实现,具体的实现逻辑或者说要执行的SQL语句配置在Mapper.xml中。这里为了统一,我们换了一个名字UserDAO.xml,实际和UserMapper.xml没有区别。
(1)自定义接口
package com.xf.dao;
import com.xf.pojo.User;
public interface UserDao {
/**
* 新增用户
* @param user
* @return
*/
public int addUser(User user);
/**
* 根据id删除用户
* @param id
* @return
*/
public int deleteUser(int id);
/**
* 修改用户
* @param user
* @return
*/
public int updateUser(User user);
/**
* 根据id查询用户
* @param id
* @return
*/
public User selectUserById(int id);
}
(2)创建UserDAO.xml,定义接口方法对应的SQL语句。
statement标签根据SQL执行的业务可选择insert,delete,update,select。
MyBatis会根据规则自动创建UserDAO接口实现类的代理对象。
规则如下:
1.UserDAO.xml 中 namespace 为接口的全类名。
2.UserDAO.xml 中 statement 的 id 为接口中对应的方法名。
3.UserDAO.xml 中 statement 的 parameterType 和接口中对应方法的参数类型一致。
4.UserDAO.xml 中 statement 的 resultType 和接口中对应方法的返回值类型一致。
<?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.xf.dao.UserDao">
<insert id="addUser" parameterType="com.xf.pojo.User">
insert into t_user (username,password,age) values (#{username},#{password},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from t_user where id=#{id}
</delete>
<update id="updateUser">
update t_user set username=#{username},password=#{password},age=#{age} where id=#{id}
</update>
<select id="selectUserById" parameterType="int" resultType="com.xf.pojo.User">
select * from t_user where id=#{id}
</select>
</mapper>
(3)在config.xml注册UserDao.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>
<!-- 配置MyBatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- POOLED配置JDBC数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://120.78.195.41:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="***"/>
<property name="password" value="***"/>
</dataSource>
</environment>
</environments>
<!--注册UserMapper.xml-->
<mappers>
<!--<mapper resource="com/xf/mapper/UserMapper.xml"/>-->
<mapper resource="com/xf/dao/UserDao.xml"/>
</mappers>
</configuration>
(4)测试
package com.xf;
import com.xf.dao.UserDao;
import com.xf.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
//加载MyBatis配置文件
InputStream is = Test.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取实现接口的代理对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
//新增用户
User user1 = new User();
user1.setUsername("张三");
user1.setPassword("123");
user1.setAge(22);
System.out.println(userDao.addUser(user1));
sqlSession.commit();
//删除用户
System.out.println(userDao.deleteUser(2));
sqlSession.commit();
//查询用户
User user2 = userDao.selectUserById(1);
System.out.println(user2);
//修改用户
User user3 = userDao.selectUserById(1);
user3.setUsername("李四");
System.out.println(userDao.updateUser(user3));
sqlSession.commit();
}
}