创建sql的映射文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mybatispro.mapper.AdminMapper">
namespace某一个接口的名称,就是对应的地址就是我们创建好的接口的位置的地址
增加(插入数据)
id = 接口那边唯一的标识
parameterType = 给数据库传入的参数类型
useGeneratedKeys=“true” 可以返回刚插入数据的主键
keyProperty=“id” 告知与主键列对应的属性
keyColumn=“id” 告知的是数据库这边的主键列
<insert id="saveAdmin" parameterType="Admin" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into admin (account,password,sex) values (#{account},#{password},#{sex})
</insert>
#{} 占位符,是经过预编译的,编译好 SQL 语句再取值,#方式能够防止 sql 注入
$ {} 拼接符,会传入参数字符串,取值以后再去编译 SQL 语句,$方式无法防止 Sql 注入
注意:MyBatis 排序时使用 order by 动态参数时需要注意,用$而不是#
修改
id = 接口那边唯一的标识
parameterType = 给数据库传入的参数类型
<update id="updateAdmin" parameterType="Admin">
update admin set account = #{account},
password = #{password},
sex = #{sex}
where id = #{id}
</update>
删除
id = 接口那边唯一的标识
parameterType = 给数据库传入的参数类型
<delete id="deleteAdmin">
delete from admin where id = #{id}
</delete>
查找
id = 接口那边唯一的标识
parameterType = 给数据库传入的参数类型
resultType 返回的数据类型,将数据库数据自动的映射到java对象中
<select id="getAdminById" resultType="Admin">
select * from admin where id = #{id}
</select>
resultType 返回的数据类型 通过反射根据返回值的类型创建一个对象
将数据库数据自动的映射到java对象中,但是有一个前提,前提是表中的列名与类中的属性名相同
但是因为再java和数据库中命名都有着各自的规定,所以mybatis在它的核心配置文件中的。
setting中有一个name="mapUnderscoreToCamelCase"的设置选项可以开启从经典的数据库名到java驼峰命名之间的转换user_name==>userName,它默认情况下为false,将属性值改为true就可以了
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
向数据库参数传递
简单参数
简单的参数形式不需要使用 parameterType 参数定义
Admin getAdminById(int id);
<delete id="deleteAdmin">
多个参数
多个参数使用@Param(“id”)进行绑定,也不需要使用 parameterType 参数定义
@Param后面括号内才的是向数据库那边传输的参数名,在数据端这里也是拿param注解标签里的字符进行数据接收
Admin getAdmin(@Param("account")String account,@Param("sex")String sex);;
传入对象
如果传入一个复杂的对象,就需要使用 parameterType 参数进行类型定义
void updateAdmin(Admin admin);
<update id="updateAdmin" parameterType="Admin">
使用map传递
也可以使用 Map 对象传递
String类型的键,Object类型的值,以map的接口
void insertUser(Map<String,Object> map);
在 sql 中使用表达式获取 map 的键即可
java中已有的类作为类型使用的时候,可以直接使用mybatis定义好的别名来使用
sql映射过来的实现代码
<select id="getAdmin1" resultType="Admin" parameterType="map">
select * from admin where account = #{account} and sex = #{sex}
</select>
测试代码
@Test
public void find2() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("account","was");
map.put("sex","女");
Admin admin = mapper.getAdmin1(map);
System.out.println(admin);
sqlSession.commit();
sqlSession.close();
}
Mybatis的基本增删改查总的代码演示
定义的接口中,对所要求的方法进行命名
package com.demo.mybatispro.mapper;
import com.demo.mybatispro.model.Admin;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface AdminMapper {
/*这个就相当于之前写的dao文件,只写是在dao文件中,写好mysql所需要的方法,并且实现它
* 现在的这里只写方法名,定义功能 , 具体的实现是在sql的映射文件当中*/
/*sql是写在xml的文件中,我们不能直接访问,
mybatis让我们在业务代码可以定义接口,在接口中定义的是要操作的方法名
方法的定义是有要求的:
方法名 与 xml中某一个标签id相同。参数类型也是一致的,包括返回值类型也是要一致的*/
void saveAdmin(Admin admin);//增
void updateAdmin(Admin admin);//改
void deleteAdmin(int id);//删
Admin getAdminById(int id);//查,根据一个id查找这个id对应的所有信息
Admin getAdmin(@Param("account")String account,@Param("sex")String sex);
//@Param后面括号内才的是向数据库那边传输的参数名,使用注解标签参数绑定
Admin getAdmin1(Map<String,Object> map);//以map形式传递参数
int getAdminCount();//返回数据港总共还几条数据
}
具体实现数据库功能的代码
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mybatispro.mapper.AdminMapper">
<!--namespace某一个接口的名称,就是对应的地址就是我们创建好的接口的位置的地址-->
<!--insert中的id名就要和我们创建好的接口中的方法名一致-->
<!--parameterType中写参数类型-->
<!--增加-->
<!--useGeneratedKeys="true" 可以返回刚插入数据的主键
keyProperty="id" 告知与主键列对应的属性
keyColumn="id" 告知的是数据库这边的主键列-->
<insert id="saveAdmin" parameterType="Admin" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into admin (account,password,sex) values (#{account},#{password},#{sex})
</insert>
<!--修改-->
<!--#{}里面写内容的属性名-->
<update id="updateAdmin" parameterType="Admin">
update admin set account = #{account},
password = #{password},
sex = #{sex}
where id = #{id}
</update>
<!--删除-->
<delete id="deleteAdmin">
delete from admin where id = #{id}
</delete>
<!--查询-->
<!--resultType 返回的数据类型 通过反射根据返回值的类型创建一个对象-->
<!--将数据库数据自动的映射到java对象中,但是有一个前提,前提是表中的列名与类中的属性名相同-->
<select id="getAdminById" resultType="Admin">
select * from admin where id = #{id}
</select>
<select id="getAdmin" resultType="Admin">
select * from admin where account = #{account} and sex = #{sex}
</select>
<!--java中已有的类型作为类型使用时,可以直接使用mybatis定义好的别名-->
<select id="getAdmin1" resultType="Admin" parameterType="map">
select * from admin where account = #{account} and sex = #{sex}
</select>
<!--返回数据港总共还几条数据-->
<select id="getAdminCount" resultType="int">
select count(*) from admin
</select>
</mapper>
这里我用的是测设代码 添加了用来测试的junit的jar包
package com.demo.mybatispro.test;
import com.demo.mybatispro.mapper.AdminMapper;
import com.demo.mybatispro.model.Admin;
import com.demo.mybatispro.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test3 {
/*单元测设*/
@Test
public void save() {
Admin admin = new Admin();
admin.setAccount("wasd");
admin.setPassword("1234");
admin.setSex("男");
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
mapper.saveAdmin(admin);
//当我们把这个admin对象中的数据存入到数据库中后,想要立即拿出刚刚保存进去的id
// 就是去insert的标签里加上useGeneratedKeys
System.out.println(admin.getId());//加入useGeneratedKeys这边就可以直接获得主键号
sqlSession.commit();
sqlSession.close();
}
//改
@Test
public void update() {
Admin admin = new Admin();
admin.setId(1);
admin.setAccount("张三");
admin.setPassword("qwer");
admin.setSex("女");
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
mapper.updateAdmin(admin);
sqlSession.commit();
sqlSession.close();
}
//删
@Test
public void delete() {
int id = 10;
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
mapper.deleteAdmin(id);
sqlSession.commit();
sqlSession.close();
}
//查
@Test//以对象参数传递
public void find() {
int id = 1;
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
Admin admin = mapper.getAdminById(id);
System.out.println(admin);
sqlSession.commit();
sqlSession.close();
}
@Test//多个参数的参数传递
public void find1() {
String account = "was";
String sex = "女";
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
Admin admin = mapper.getAdmin(account,sex);
System.out.println(admin);
sqlSession.commit();
sqlSession.close();
}
@Test//使用map进行参数传递
public void find2() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("account","was");
map.put("sex","女");
Admin admin = mapper.getAdmin1(map);
System.out.println(admin);
sqlSession.commit();
sqlSession.close();
}
@Test//返回数据港总共还几条数据
public void find3() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
int count = mapper.getAdminCount();
System.out.println(count);
sqlSession.commit();
sqlSession.close();
}
}
测试的jar包坐标配在pom.xml管理当中,我使用的是maven的jar包管理
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>provided</scope><!--test 也是不会被打包 到war包-->
</dependency>
Mybits的核心配置
<typeAliases>
<typeAlias type="com.demo.mybatispro.model.Admin" alias="Admin"></typeAlias>
</typeAliases>
上一篇:>>> Mybatis框架概述和搭建详解以及日志和单元测试
下一篇:>>> Mybatis对数据库数据的查询