笔记要点
出错分析与总结
/**================Mybatis参数值的获取:#和$符号的区别=============== * #{}:可以获得map中的值或者pojo对象属性的值; * ${}:可以获得map中的值或者pojo对象属性的值; * 区别: * #{}: 是以预编译的形式,直接将参数设置到sql语句中; * 使用PreparedStatement的sql封装方法 ,防止sql注入; * ${}: 取出的值直接封装在sql语句中,不能防止sql注入,会有安全问题; * 总结: * 大多数情况下,我们取参数的值都应该去使用#{}; * 但是,原生jdbc不支持占位符的地方,我们就可以使用${}进行取值; * 比如分表/排序/取到的参数值是表名...:按照年份分表拆分: * select * from ${year}_salary where xxx; * select * from tbl_employee order by ${f_name}; * ---------------------------------- * #{}:更丰富的用法: * 规定参数的一些规则: javatype/jdbcType/mode(存储过程)/....... * jdbcType通常需要在某种特定的条件下被设置,在我们的数据为null的时候, * 有些数据库可能不能识别mybatis对null的默认处理;比如Oracle(报错)mysql(没有问题). * * */
工程组织
接口 EmployeeMapper
public interface EmployeeMapper { //多个参数处理,传入map public Employee getEmpByMap(Map<String,Object> map); }
映射文件 Employee.xml
<mapper namespace="com.dao.EmployeeMapper"><!--namespace: 名称空间;id: 唯一标识; resultType:返回值类型; --> <!--public Employee getEmpByMap(Map<String,Object> map);--> <select id="getEmpByMap" resultType="com.bean.Employee" databaseId="mysql"> select * from ${table_name} where id = ${id} and last_name = #{lastName} </select>
测试代码
public class test_tp24 { public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test05() throws Exception{ //默认是不自动提交数据的,需要我们自己手动提交 SqlSession openSession = getSqlSessionFactory().openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); HashMap<String, Object> map = new HashMap<>(); map.put("lastName", "葫芦娃"); map.put("id", 4); map.put("table_name", "tbl_employee"); Employee empByMap = mapper.getEmpByMap(map); System.out.println(empByMap); //最后手动提交 openSession.commit(); }finally { openSession.close(); } } }
测试结果
DEBUG 11-29 15:22:20,111 ==> Preparing: select * from tbl_employee where id = 4 and last_name = ? (BaseJdbcLogger.java:145) DEBUG 11-29 15:22:20,132 ==> Parameters: 葫芦娃(String) (BaseJdbcLogger.java:145) DEBUG 11-29 15:22:20,142 <== Total: 1 (BaseJdbcLogger.java:145) Employee{id=4, lastname='葫芦娃', email='葫芦娃@163.com', gender='0'}