目录
一、封装SqlSession工具类
public class SqlSessionUtils {
public static SqlSession sqlSession() throws IOException {
String mybatisConfigFilePath = "mybatis-config.xml";
// ②以输入流的形式加载Mybatis配置文件
InputStream inputStream = Resources.getResourceAsStream(mybatisConfigFilePath);
// ③基于读取Mybatis配置文件的输入流创建SqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2.使用SqlSessionFactory对象开启一个会话
SqlSession session = sessionFactory.openSession(true);
return session;
}
}
二、mybatis的获取参数的两种方式
1、${}:本质字符串拼接
2、#{}:本质占位符赋值
public void test04() throws Exception {
String name = "小明";
Class.forName("");
Connection connection = DriverManager.getConnection("", "", "");
//使用sql拼接
//PreparedStatement preparedStatement = connection.prepareStatement("select * from t_user where username = '" + name + "'");
//使用占位符赋值
PreparedStatement prepareStatement = connection.prepareStatement("select * from t_user whwer username = ? ");
prepareStatement.setString(1,name);
}
}
三、#{}与${}的使用使用场景
3.1、mapper接口方法的参数为单个的字面量类型
注意事项:可以通过${}和#{}以任意的字符串获取参数,但是${}需要添加单引号,不然报错
测试如下:
mapper接口方法
User selectUsers(String name);
映射文件方法
<select id="selectUsers" resultType="com.cjc.mybatis.entity.User">
<!--select * from t_user where username = #{name}-->
select * from t_user where username = '${name}'
</select>
public void test05(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User admin = mapper.selectUsers("admin");
System.out.println("admin = " + admin);
}
2.2、mapper接口方法的参数为多个时
mybatis会将多个参数存放到一个map集合中,两种方式
1、以arg0,arg1为键,参数为值
2、以param1,param2为键,参数为值
注意事项:可以通过${}和#{}以任意的字符串获取参数,但是${}需要添加单引号,不然报错
测试代码:
mapper接口方法
User loginUser(String username,String password);
<select id="loginUser" resultType="com.cjc.mybatis.entity.User">
<!-- select * from t_user where username = #{arg0} and password = #{arg1}-->
select * from t_user where username = '${param1}' and password = '${param2}'
</select>
@Test
public void test06(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User admin = mapper.loginUser("admin","123456");
System.out.println("admin = " + admin);
}
3.3、手动设置一个map集合进行存储参数
注意事项:可以通过${}和#{}以任意的字符串获取参数,但是${}需要添加单引号,不然报错
User loginUserMap(Map<String,Object> map);
<select id="loginUserMap" resultType="com.cjc.mybatis.entity.User">
<!--select * from t_user where username = '${username}' and password = '${password}'-->
select * from t_user where username = #{username} and password = #{password}
</select>
@Test
public void test07(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<>();
map.put("username","admin");
map.put("password","123456");
User user = mapper.loginUserMap(map);
System.out.println("admin = " + user);
}
3.4、mapper接口方法的参数是实体类型的参数
注意事项:可以通过${}和#{}以任意的字符串获取参数,但是${}需要添加单引号,不然报错
void insertUsers(User user);
<insert id="insertUsers">
insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
@Test
public void test08(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(null, "小王", "123456", 23, "男", "64789@qq.com");
mapper.insertUsers(user);
}
3.5、使用@param注解命名参数
注意事项:可以通过${}和#{}以任意的字符串获取参数,但是${}需要添加单引号,不然报错
User queryUser(@Param("username") String username,@Param("password") String password);
<select id="queryUser" resultType="com.cjc.mybatis.entity.User">
select * from t_user where username = #{username} and password = #{password}
</select>
@Test
public void test09(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.queryUser("admin","123456");
System.out.println("admin = " + user);
}