文章目录
一,MyBatis是什么?
MyBatis 是一个orm框架(Object relation Mapping),持久层技术,支持动态sql调用,存储过程调用(数据库编程 for if in out),sql和java代码显示分离。(高内聚 低耦合)提高程序的扩展性和维护性,由 ibatis 改进而来。
二,MyBatis的执行流程是怎样的?
如图所示:
代码展示:
//加载全局置文件
String fileName = "mybatis-config.xml";
//Resources是mybatis中提供的一个工具类
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(fileName);
} catch (IOException e) {
e.printStackTrace();
}
//创建工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂拿到一个会话
SqlSession sqlSession = factory.openSession();
//通过反射拿到接口
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
//染头通过接口拿到方法并使用:以修改为例子
Student student = new Student(2, "张学潇2号", 35, "东莞", "10000", "fafa",1);
int i = mapper.updateStudentById(student);
if (i>0){
System.out.println("修改成功");
}else {
System.out.println("修改失败");
}
sqlSession.commit();
sqlSession.close();
注意:增删改需要提交事务
三,MyBatis中接口方法多个参数解决方案?
1,单个参数
① 对象的话直接 #{对象的属性} 取值。
② 一个参数的话直接 #{参数名字} 取值。
2,多个参数
1: @Param (“名称”) 就是在我们sql语句中使用的变量名(推荐)
#{名称}
(@Param("id") int id, @Param("name") String name,@Param("bir") Date bir, @Param("address")
然后可以直接使用#{Param中设置的值}来取值: 例如name = #{name};
2: 使用map集合的传参 #{key}
int saveByMap(Map<String,Object> map);
然后可以根据键取值的方式获取
例如 键=“name” 值 = “张三” #{name}= “张三”
3: 使用参数的下标#{arg0}。。。。。
直接格局元素下标开始获取
例如:#{param1},#{param2},#{param3},#{param4}
#{arg0},#{arg1},#{arg2},#{arg3}
param 下标从1开始,arg 下标从0开始
四,MyBatis中获取主键值,以及创建别名
一,主键值的获取
例子:
<insert id="save" parameterType="com.ujiuye.mybatis.pojo.Person">
<selectKey keyProperty="id" keyColumn="id" order="AFTER" resultType="int">
select LAST_INSERT_ID();
</selectKey>
INSERT INTO `person`(`id`, `name`, `bir`, `address`)
VALUES (#{id},#{name},#{bir},#{address});
</insert>
在< insert > 块中加入 < selectkey >,
属性值意思分别是
返回保存了当前对象的主键值
keyProperty: 类中的主键字段匹配的属性
keyColumn: 表中的那个字段是主键字段
order: BEFORE(先获取主键然后再插入数据) AFTER(先插入数据,在获取主键)
resultType: 主键的类型是什么
获取方式:
//获取方式
System.out.println("插入后 id:"+person.getId());
一,别名的创建
在配置文件的头部插入
< typeAliases>
< typeAliase type=”类的描述” aliase=”定义名字” ></ typeAliase>
</ typeAliases>
或者:
< typeAlias type=“com.ujiuye.bean.Person” alias=“Person”/>
< package name=“beike.mybatis.pojo”/>
< /typeAliases>