- 1. Mybatis概述
- 2. Maven中Mybatis的环境配置
- 3. mybatis的开发步骤
- 4. 使用xml完成Mybaties的CRUD
- 4.1 删除
- 4.2 修改
- 4.3 添加
- 4.4 查询
- 4.4.1 根据参数查询(不推荐)
- 4.4.2 根据对象查询
- 4.4.3 模糊查询
- 5. 使用注解的方式完成mybatis的CRUD
2. Maven中Mybatis的环境配置mybatis是apache组织的一个开源项目,最初叫iBatis,2010年迁移到了Google改名为mybatis。2013年迁移GitHub。
mybatis是一个持久层框架,支持自定义动态sql,存储过程、高级映射。
mybatis对原有的jdbc中的所有操作都实现了封装,消除了所有jdbc的代码,使开发者只需要关心sql语句。
- 在pom.xml中引入:mysql驱动依赖、mybatis依赖
建议引入:log4j(日志依赖)、junit(单元测试依赖)
4.0.0 com.mysy test_mybatis1.0-SNAPSHOT mysql mysql-connector-java5.1.6 org.mybatis mybatis3.4.5 log4j log4j1.2.17 junit junit4.12
- 在resource目录下创建log4j.properties,没有引入log4j依赖不用创建
### 设置### log4j.rootLogger = debug,stdout ### 输出信息到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.Encoding = utf-8 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
- 在resource包下创建核心配置文件:mybatis-config.xml
3. mybatis的开发步骤4.在resource下创建配置文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///mybatis01 jdbc.username=root jdbc.password=1234在mybatis的主配置文件中的configuration标签中定义properties标签,并引入指定的properties文件
- 创建实体类
- 创建实体类对应的Mapper接口,以及相关增删改查方法
- 在resource下编写mapper接口对应的Mapper.xml文件
select * from user namespace:接口类名,例如:com.mysy.mapper.UserMapper
id:接口方法名,例如:findAll()
resultType:返回值类型,查找方法的返回值无论是数组、集合还是实体类只需要写实体类名即可。增删改方法没有返回值类型。
可以给类型取别名:
在mybatis的主配置文件中的configuration标签中定义typeAliases,有两种方式:推荐使用package标签
4. 使用xml完成Mybaties的CRUD 4.1 删除要将接口所对应的xml文件注册在mybatis的主配置文件中
如果要配置的xml文件较多可以使用如下方式:
package标签中name属性的值是xml文件所对应的接口所在的包名;还需要保证这些xml文件所在的目录结构必须与接口的包结构完全一致
4.2 修改sql语句
4.3 添加sql语句
sql语句 主键自增长的添加方法,两种方法,推荐没有注释的
mybatis的添加语句可以不写添加的字段 直接写添加的值,建议类的属性全部写上,因为没有给类的属性赋值就传一个空值insert into user values(#{id},#{name},#{birthday},#{address},#{tel})
主键回填:
- 自增长主键回填
select last_insert_id() insert into user values(null,#{name},#{birthday},#{address},#{tel})selectkey标签可以返回执行添加语句前后未知的自增长主键的值到实体类对象中
4.4 查询uuid的主键回填
insert id="saveUser2">select uuid() insert into user2 values(#{id},#{name},#{age})select uuid():生成一个uuid
4.4.1 根据参数查询(不推荐)基础结构
Mapper接口中的方法
Customer findCustomerById(Integer id);查询语句
注:如果参数列表的个数只有一个,那么占位符#{}中的内容可以是任意的
Mapper接口中的方法
ListfindCustomersByNameAndAge(String name,int age); 查询语句
对方法的参数使用注解起别名
Mapper接口中的方法istfindCustomersByNameAndSex(@Param("name") String name, @Param("sex") String Sex); 查询语句
4.4.2 根据对象查询将参数存储到Map集合中
Mapper接口中的方法ListfindCustomersByNameAgeSex(Map map); 传入的参数
Map map = new HashMap(); map.put("name","宋江"); map.put("sex","男"); map.put("age",88);查询语句
4.4.3 模糊查询Mapper接口中的方法
Customer findCustomerByUserNameAndPassword(Customer c);创建对象传入参数
Customer c = new Customer(); c.setUsername("15121001484"); c.setPassword("123456"); Customer cus = customerMapper.findCustomerByUserNameAndPassword(c);查询语句 表的键与实体类名相同
5. 使用注解的方式完成mybatis的CRUDMapper接口中的方法
ListfindCustomersLikeName(Customer c); 传入参数
String name = "小"; // 方式一 // 方式二 Customer c = new Customer(); c.setName(name); Listcus = customerMapper.findCustomersLikeName(c); for(Customer cc : cus){ System.out.println(cc); } 查询语句
直接在Mapper接口的方法上写注解
@Insert("insert into passenger values (#{id},#{name},#{sex},#{age})") int savePassenger(Passenger p); @Delete("delete from passenger where id = #{iidd}") int deletePassenger1(Integer id); @Delete("delete from passenger where id = #{id}") int deletePassenger2(Passenger p); @Update("update passenger set sex = #{sex} , age = #{age} where id = #{id}") int updatePassenger(Passenger p); @Select("select * from passenger where id = #{id}") Passenger findPassengerById(Passenger p); @Select("select count(*) from passenger") int findPassengerCount(); // @Select("select * from passenger where name like #{name}") @Select("select * from passenger where name like concat('%',#{name},'%')") ListfindPassengersLikeName(Passenger p);



