大三东软暑期实训-mybatis篇

    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
经验分享 程序员 微信小程序 职场和发展