诚然,这种方式能够正常工作,对使用旧版本 MyBatis 的用户来说也比较熟悉。但现在有了一种更简洁的方式——使用和指定语句的参数和返回值相匹配的接口(比如 BlogMapper.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。
文档https://mybatis.org/mybatis-3/zh/getting-started.html
#{}是预编译处理,是占位符,${}是字符串替换,是拼接符。
1.导包
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
<scope>compile</scope>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
</dependency>
最新的:
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
2.工具类
MybatisUtil
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.Reader;
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
//加载mybatis的配置文件(它也加载关联的映射文件)
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
e.printStackTrace();
}
//构建sqlSession的工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
public static SqlSession getSqlSession(){
//创建能执行映射文件中sql的sqlSession
return sqlSessionFactory.openSession();
}
}
3.xml文件
mabatis-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.rjxy.mybatis.bean.User" alias="User" />
可添加多个
<typeAlias type="com.rjxy.mybatis.bean.User" alias="别名" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="Liu128041384" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/rjxy/mybatis_test/test1/UserMapper.xml" />
可添加多个
<mapper resource="地址" />
</mappers>
</configuration>
4.案例增删改查
mapper.xml
namespace=“那个定义增删改查的接口”
…的id 里面的方法名
parameterType 输入的值的类型 这里要准确的路径com.rjxy.mybatis.bean.User,因为定了别名所以…
resultType 返回值的类型,这里要准确的路径com.rjxy.mybatis.bean.User,因为定了别名所以…
<?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.rjxy.mybatis.bean.UserMapper">
<select id="getUsers" resultType="User">
select * from users
</select>
<select id="getUser" parameterType="int" resultType="User">
select * from users where id=#{id}
</select>
<insert id="insertUser" parameterType="User">
insert into users(name,age) values(#{name},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
<update id="updateUser" parameterType="User">
update users set name=#{name},age=#{age} where id=#{id}
</update>
</mapper>
public interface UserMapper {
public List<User> getUsers();
public User getUser(int id);
public int insertUser(User user);
public void deleteUser(int id);
public void updateUser(User user);
}
其中增删改的返回值可以写成int型,可以实现一些其他的功能
sqlSession.getMapper(UserMapper.class)就可以获取到对应的接口,调用其方法即可
public class UserMapperImpl implements UserMapper{
private SqlSession sqlSession = MybatisUtil.getSqlSession();
@Override
public List<User> getUsers() {
return sqlSession.getMapper(UserMapper.class).getUsers();
}
@Override
public User getUser(int id) throws Exception {
return sqlSession.getMapper(UserMapper.class).getUser(id);
}
@Override
public int insertUser(User user) {
int i = sqlSession.getMapper(UserMapper.class).insertUser(user);
sqlSession.commit();
return i;
}
@Override
public void deleteUser(int id) {
sqlSession.getMapper(UserMapper.class).deleteUser(id);
sqlSession.commit();
}
@Override
public void updateUser(User user) {
sqlSession.getMapper(UserMapper.class).updateUser(user);
sqlSession.commit();
}
}
没有写关闭流
@Test
public void 查询所有用户(){
List<User> users = new UserMapperImpl().getUsers();
for (User user : users) {
System.out.println(user);
}
}
@Test
public void 查询某一用户(){
User user = new UserMapperImpl().getUser(2);
System.out.println(user.toString());
}
@Test
public void 插入(){
User user=new User(-1,"liu",18);
new UserMapperImpl().insertUser(user);
}
@Test
public void 删除(){
new UserMapperImpl().deleteUser(2);
}
@Test
public void 更新(){
new UserMapperImpl().updateUser(new User(6,"lll",7));
}