目录
- 1.1 前述
- 1.2 结果映射resultMap
- 1.2.1 字段名和属性名不匹配情况
- 1.2.2 解决方法
- 1.3 使用Insert 方法添加数据(涉及主键 问题)

1.1 前述
MyBatis可以方便的对数据库进行操作,而数据库表可能是一个相对独立的表(这里谓之单表),也可能两个或多个有密切联系的表(这里谓之多表),本章先来学习单表的增删改查操作,SqlSession的若干方法,这些方法被用来执行定义在mapper映射文件中的SELECT、INSERT、UPDATE和DELETE语句。以下是一些常用的方法。
T selectOne(String statement, Object parameter) 查询单条记录
List selectList(String statement, Object parameter) 查询记录集合
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey) 查询记录封装成Map集合
int insert(String statement, Object parameter) 插入一条记录
int update(String statement, Object parameter) 修改一条记录
int delete(String statement, Object parameter) 删除一条记录
以上方法可以重载,第二个参数不是必要的,重载方法如下。
T selectOne(String statement)
List selectList(String statement)
<K,V> Map<K,V> selectMap(String statement, String mapKey)
int insert(String statement)
int update(String statement)
int delete(String statement)
v
1.2 结果映射resultMap
结果映射就是数据库中的字段名和Java代码中 实体类属性名一一对应的机制,查询的结果封装成java对象,如果数据库的字段名称跟相应的类的属性名称不一样,不作处理的话,mybatis运行后相应的字段处的查询结果就为空
1.2.1 字段名和属性名不匹配情况
<select id="findAllStudents" resultType="com.lifeng.entity.Student">
SELECT id,
studentname,
gender,
age
FROM STUDENT
</select>
1.2.2 解决方法
- 在sql语句中 用起别名的方法对应字段名
- 在xml映射文件中配置resutlMap
- 设置驼峰命名的映射
ResultMap: 将查询的sql结果映射为Student 对象
id property=“sid” -----------> colum="id "
字段名---------------------------------属性名
除上面的方法解决外,在遵循数据库和Java命名规则时只需配置Mybatis文件
1.3 使用Insert 方法添加数据(涉及主键 问题)
(1)检查数据库student表,确认主键非自增长,在接口类IStudentDao中新增一个方法。
public int insertStudent(Student student);
(2)在映射文件StdentMapper.xml中新增一段insert语句。
<!-- 添加一个学生 -->
<insert id="insertStudent" parameterType="Student">
INSERT INTO student(id, studentname, gender, age)
VALUES
(#{sid}, #{sname}, #{sex}, #{age})
</insert>
#{sid}是占位符,传进来的值是参数类型Student对应的同名属性值,即Student对象的sid属性的值
在不涉及业务层的情况 代码如下:
*@Before在执行sql时 优先执行initial(); 加载配置文件
public class AppTest {
SqlSessionFactory factory = null;
@Before
public void init(){
try {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void add() {
SqlSession sqlSession = factory.openSession(true);
// 获取接口实现类 多态 动态代理方式 ->代理对象 实现类
UserMapper userDao = sqlSession.getMapper(UserMapper.class); // UserDaoImpl@1353456
System.out.println("userDao = " + userDao);
User user = new User();
user.setPassword("99999");
//user.setUsername("root");
Integer line = userDao.insertUser(user);
System.out.println(line>0);
sqlSession.close();
}
}
在数据库中 设置主键自增主键后 在mapper.xml文件中 配置如下
注意 是insert sql语句