3.平凡之路-传统模式添加操作
2017-08-25 本文已影响0人
胖先森
回顾: 上节课我们完成了MyBatis的环境搭建
核心配置文件
映射文件
API的执行过程
如何执行定制的SQL语句
我们测试的是"死"的数据,那么下面我们使用容器传递动态的数据
添加操作传递数据专题
1.通过Map传递数据
- 映射文件代码
<!-- <insert id="add02"
parameterType="java.util.Map"></insert> -->
<insert id="add02"
parameterType="map">
INSERT INTO skill (skill_name,num)
VALUES
(#{shxt},#{number})
</insert>
parameterType : 传递参数数据的类型 java.util.Map或者MyBatis提供额内置类型映射map
#{map中的Key}
获取对应的值,并且进行了预处理
- Java测试代码
public class 动态数据之通过Map传递数据 {
public static void main( String[] args ) {
SqlSession sqlSession = null;
try {
//1.读取核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2.创建SqlSession工厂(SqlSessionFactory)
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.获取SqlSession
//****** SqlSession完成所有的持久化操作CRUD
sqlSession = sqlSessionFactory.openSession();
//4.关键步骤: 定位执行SQL语句
//****如何定位 (namespace+"."+id)
Map<String, Object> map = new HashMap<String, Object>();
map.put("shxt", "CSS");
map.put("number", 66);
int row = sqlSession.insert("shxt.cy42.mss.add02",map);
//5.针对于CUD操作需要手动提交事务
sqlSession.commit();
System.out.println("影响的行数:"+row);
} catch (IOException ex) {
ex.printStackTrace();
}finally {
//6.关闭资源
if(sqlSession!=null){
sqlSession.close();
}
}
}
}
-
图解说明
map传递数据
2.通过自定义Java类传递数据
- 自定义Java类
public class Skill {
private Integer skillId;
private String skillName;
private Integer skillNumber;
//省略getter和setter方法
}
- 映射文件代码
<insert id="add03"
parameterType="com.shxt.model.Skill">
INSERT INTO skill (skill_name,num)
VALUES
(#{skillName},#{skillNumber})
</insert>
parameterType:如果不是Java内容类型,可以设置自定义类型的全路径,后面我们也可以
设置自定义别名
#{Java类中属性}
获取对应的值
- Java代码测试
public class 动态数据之通过Skill持久化类传递数据 {
public static void main( String[] args ) {
SqlSession sqlSession = null;
try {
//1.读取核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2.创建SqlSession工厂(SqlSessionFactory)
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.获取SqlSession
//****** SqlSession完成所有的持久化操作CRUD
sqlSession = sqlSessionFactory.openSession();
//4.关键步骤: 定位执行SQL语句
//****如何定位 (namespace+"."+id)
Skill s = new Skill();
s.setSkillName("jquery");
s.setSkillNumber(99);
int row = sqlSession.insert("shxt.cy42.mss.add03",s);//传递数据哟
//5.针对于CUD操作需要手动提交事务
sqlSession.commit();
System.out.println("影响的行数:"+row);
} catch (IOException ex) {
ex.printStackTrace();
}finally {
//6.关闭资源
if(sqlSession!=null){
sqlSession.close();
}
}
}
}
-
图解说明
使用自定义Java类传递数据
3.关联对象
- 自定义Java类
Teacher.java
public class Teacher {
private Integer id;
private String name;
//省略getter和setter方法
}
Skill.java
public class Skill {
private Integer skillId;
private String skillName;
private Integer skillNumber;
//关联对象
private Teacher teacher;
}
- 映射文件代码
<insert id="add04"
parameterType="com.shxt.model.Skill">
INSERT INTO skill (skill_name,num,fk_teacher_id)
VALUES
(#{skillName},#{skillNumber},#{teacher.id})
</insert>
#{teacher.id}
关联对象使用"."运算符
- Java测试代码
public class 动态数据之保存技能同时需要保存老师ID {
public static void main( String[] args ) {
SqlSession sqlSession = null;
try {
//1.读取核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2.创建SqlSession工厂(SqlSessionFactory) 相当于 Connection
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.获取SqlSession 相当于 执行SQL语句对象PreparedStament预处理对象
//****** SqlSession完成所有的持久化操作CRUD
sqlSession = sqlSessionFactory.openSession();
//4.关键步骤: 定位执行SQL语句
//****如何定位 (namespace+"."+id)
Skill s = new Skill();
s.setSkillName("MyBatis");
s.setSkillNumber(100);
//假设建立一个老师
Teacher t = new Teacher();
t.setId(-999);
t.setName("胖先森");
//建立联系
s.setTeacher(t);
int row = sqlSession.insert("shxt.cy42.mss.add04",s);
//5.针对于CUD操作需要手动提交事务
sqlSession.commit();
System.out.println("影响的行数:"+row);
} catch (IOException ex) {
ex.printStackTrace();
}finally {
//6.关闭资源
if(sqlSession!=null){
sqlSession.close();
}
}
}
}
-
图解说明
关联对象
4.返回自增长主键设置
- 映射文件
<!-- 添加返回主键设置 -->
<insert id="add05"
parameterType="com.shxt.model.Skill"
useGeneratedKeys="true"
keyProperty="skillId">
INSERT INTO skill (skill_name,num)
VALUES
(#{skillName},#{skillNumber})
</insert>
keyProperty 将自增长的主键值赋值给skillId属性