mybatis以map的方式查询所有数据
mapper接口
//通过map集合获取所有员工信息
/*
* @MapKey("id")指定map集合中的键
* 所查询出的map集合:
* 键:@MapKey注解的值所对应的字段的值
* 值:将数据转换之后的map
* 例如:
* {2={sex=男, emp_name=admin, id=2, age=20}, 4={sex=男, emp_name=张三, id=4, age=25}, 6={sex=女, emp_name=admin, id=6, age=30}, 7={sex=男, emp_name=张三, id=7, age=25}, 8={sex=男, emp_name=张三, id=8, age=25}, 9={sex=男, emp_name=张三, id=9, age=25}}
*/
@MapKey("id")
Map<String, Object> getEmpMapAll();
/*Map<String, Emp> getEmpMapAll();*/
xml映射文件
<!-- Map<String, Object> getEmpMapAll(); -->
<select id="getEmpMapAll" resultType="map">
select id,emp_name,age,sex from emp
</select>
<!--
测试类
Map<String, Object> map = mapper.getEmpMapAll();
System.out.println(map);
@MapKey("id")指定对应数据库字段
用来作为map集合中的键,查询的条数据为map的值
在添加过程中获取自动生成的主键
mapper接口
//添加功能并获取自动递增的id
void insertAndGetKey(Emp emp);
xml映射文件
<!--
useGeneratedKeys:设置使用自动生成的主键
keyProperty:所生成的主键所对应的属性
-->
<insert id="insertAndGetKey" useGeneratedKeys="true" keyProperty="id">
insert into emp values(null, #{empName}, #{age}, #{sex})
</insert>
测试类
Emp emp = new Emp(null, "李四", 20, "女");
mapper.insertAndGetKey(emp);
System.out.println(emp);
useGeneratedKeys=“true” 默认为ture,需要指定一个keyProperty对应对象中的主键属性
数据插入成功后,默认它会封装到对象主键属性中
两种预编译对象的比较
PreparedStatement:可以通过占位符赋值,在为字符串类型的占位符赋值时,会自动加单引号
Statement:只能通过字符串拼接的方式拼接sql,需要手动加单引号
Class.forName("");
Connection conn = DriverManager.getConnection("","","");
// PreparedStatement:可以通过占位符赋值,在为字符串类型的占位符赋值时,会自动加单引号
PreparedStatement ps = conn.prepareStatement("select * from emp where name = ?");
ps.setObject(1, "admin");
// Statement:只能通过字符串拼接的方式拼接sql,需要手动加单引号
Statement statement = conn.createStatement();
String name = "admin";
statement.executeQuery("select * from emp where name = '"+name+"'");
mybatis提供了两种获取参数值的方式:
#{}:PreparedStatement
${}:Statement
mybatis获取参数为单个字面量的方式
映射文件
<!-- List<Emp> getEmpListByEmpName(String empName); -->
<select id="getEmpListByEmpName" resultType="Emp">
select id,emp_name,age,sex from emp where emp_name = '${_parameter}'
<!--select id,emp_name,age,sex from emp where emp_name = #{empName} -->
</select>
mapper接口
//根据员工姓名获取员工信息
List<Emp> getEmpListByEmpName(String empName);
测试类、
@Test
public void testGetEmpListByEmpName() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);//设置自动提交事务
ParamMapper mapper = sqlSession.getMapper(ParamMapper.class);
List<Emp> list = mapper.getEmpListByEmpName("李四");
for (Emp emp : list) {
System.out.println(emp);
}
}
${}是直接sql拼接,传进来的字符串需要自己添加单引号
#{}是预编译sql,传进来的字符串会自动加上单引号