mybatis的使用需要两个依赖(mybatis框架底层依赖jdbc),一个是mybatis的框架包,另一个是jdbc的驱动包,其中jdbc的驱动包与数据库的版本有关,mysl数据库为8.多的就要8.多的。直接搜mysql,选第一个 jdbc比mybatis安全,因为它是原生的 mybatis特性,实现ORM(对象关系映射),数据库表->实体类,表字段->实体类属性,表中每一条数据都会自动封装到类的实例中。 mysql8的jdbc驱动不一样,还有url中加时区 mybatis不支持事务,session.commit(),或者openSession(true) #{对象的属性}相当于调用了对象.get方法 传入的参数是String或者Integer时可以不写,对象类型就要写。 加载sqlMapConfig.xml得到sqlSessionFactory对象,sqlSessionFactory创建sqlSession.sqlSession执行sql 传多个参数不封装成对象 int deleteInfoByNameAndDept(@param("empName"),@param("deptName")String ,deptName),@param(“deptName”)括号中的名字一定要和.xml文件中#{}中的名字一样。 查询多个对象,返回的不应该是集合,应该是集合里面的对象,也就是满足ORM中的对象。 log4j配置文件一定要在resources下,并且名字不能变,log4j.properties 别名配置将来在spring中配置 $取字符串值不加单引号 where标签不传值可能会出错 数据库表字段名与实体类属性名不一致时,根据条件和需要可以采用三种方法:别名、resultmap,自动映射的resultmap(配置mapUnderscoreToCamelCase为true,默认就为true) 注意<sql>和<include>的配合使用 注意<where>的拼接 注意<collection>的使用,collection有array、list等
<select id="batcharray"
resultType="User">
select * from user
where id in <!-- foreach用来做批量处理数据
collection的值是固定的,array表示数组
item是临时获取到的数据,相当于for循环的i
open以什么方式开始
close以什么方式结束
separator是指在进行SQL拼接时用什么分隔符,但是SQL中只认识逗号(,,,,,)
-->
<foreach collection="array"
item="i"
open="("
close=")"
separator=",">
#{i}
</foreach>
</select>
取代<collection>的是传数组,遍历数组,foreach中执行sql list.add(4)<=>Integer.ValueOf(4) <collection>为map时,collection和key要保持一致:
<!--
当collection接收map的数据格式时,
collection值就是map封装的key
item表示集合中每一个元素进行迭代时的别名,
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束。
-->
<select id="foreachmap" resultType="User">
select * from user where id in
<foreach collection="key"
open="("
close=")"
separator=","
item="i">
#{i}
</foreach>
</select>
public void foreachMap(){
//创建会话
SqlSession session =
ssf.openSession();
//定位SQL并执行
Map map = new HashMap();
map.put("key",new int[]{
23,24,25});
//第一个参数用来定位SQL
//第二个参数用来给SQL传参,map类型
List<User> list =
session.selectList(
"DynamicSqlMapper.foreachmap",
map);
//遍历list
for (User user : list) {
System.out.println(user);
}
//释放资源
session.close();
}
<update>和<insert>没有resultType,默认int