Map集合传参
假设我们的实体类,或者数据库中的表,字段或者参数过多,我们可以考虑使用Map
接口类:
//插入一条数据
void addUser(Map<String,Object> map);
<insert id="addUser" parameterType="map" >
insert into t_user values(#{user_id},#{user_name},#{user_password},#{user_gender},#{regist_time})
</insert>
public class Test {
@org.junit.Test
public void test(){
//通过封装好的工具类获取SqlSession会话
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//通过接口类型class获取接口对象实例(动态代理)
UserDao mapper = sqlSession.getMapper(UserDao.class);
HashMap<String, Object> map = new HashMap<>();
map.put("user_id",15);
map.put("user_name","ccc");
map.put("user_password","88888");
map.put("user_gender",0);
map.put("regist_time",new Date());
//执行接口中的方法
mapper.addUser(map);
sqlSession.commit();
//关闭SqlSession
sqlSession.close();
}
}
执行结果:
模糊查询
接口类
//模糊查询
List<User> queryName(String name);
mapper.xml文件SQL语句(通过在配置文件中用"%"连接):
<select id="queryName" parameterType="String" resultType="entity.User">
select * from t_user where username like "%"#{name}"%"
</select>
测试类:
public class Test {
@org.junit.Test
public void test(){
//通过封装好的工具类获取SqlSession会话
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//通过接口类型class获取接口对象实例(动态代理)
UserDao mapper = sqlSession.getMapper(UserDao.class);
//执行接口中的方法
List<User> users = mapper.queryName("c");
for (User user:users) {
System.out.println(user);
}
sqlSession.commit();
//关闭SqlSession
sqlSession.close();
}
}
方式二:
Mapper.xml文件sql语句(通过在测试类中加%值%)
<select id="queryName" parameterType="String" resultType="entity.User">
select * from t_user where username like #{name}
</select>
测试类:
public class Test {
@org.junit.Test
public void test(){
//通过封装好的工具类获取SqlSession会话
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//通过接口类型class获取接口对象实例(动态代理)
UserDao mapper = sqlSession.getMapper(UserDao.class);
//执行接口中的方法
List<User> c = mapper.queryName("%c%");
for (User user:c) {
System.out.println(user);
}
sqlSession.commit();
//关闭SqlSession
sqlSession.close();
}
}
数据源优化问题
将数据源中property属性字符串写死的方式改变为外部引用properties文件中的数据-----${键}
db.properties文件:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_zr?serverTimezone=PRC&useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=root
类型别名(存在的意义用来减少类完全限定名的冗余)
将某个实体类型别名为指定名字
<typeAliases>
<typeAlias type="entity.User" alias="user"></typeAlias>
</typeAliases>
指定某个包名:默认别名就是这个类的类名,首字母小写(推荐),大写也不报错,如果添加注解则为注解中的别名
<typeAliases>
<package name="entity"/>
</typeAliases>
映射器(Mappers)
MapperRegistry:注册绑定我们的Mapper文件
- 方式一:resource属性注册
<!-- 注册接口相应的mapper文件-->
<mappers>
<mapper resource="dao\UserMapper.xml"/>
</mappers>
- 方式二:class文件绑定注册
<!-- 注册接口相应的mapper文件-->
<mappers>
<mapper class="dao.UserMapper"></mapper>
</mappers>
注意:
-
接口和它的Mapper配置文件必须同名
-
接口和它的Mapper配置文件必须在同一个包下
否则会报错 -
方式三:使用扫描包进行注入绑定
<!-- 注册接口相应的mapper文件-->
<mappers>
<package name="dao"/>
</mappers>
注意:
- 接口和它的Mapper配置文件必须同名
- 接口和它的Mapper配置文件必须在同一个包下
否则会报错