映射文件内的增删查改
准备工作
- 准备一张数据表,用于进行数据库的相关操作。
- 新建maven工程, 导入mysql-connector-java和mybatis依赖。
- 新建一个实体类,类的字段要和数据表的数据对应
- 编写接口
- 编写mybatis主配置文件
java
public class User {
private String name;
private String gender;
private int age;
private String address;
private String email;
private String qq;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
}
XML
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
java
public class Main {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(resourceAsStream).openSession();
}
}
后续只需在接口内添加相关方法,编写mapper映射文件进行测试,后面仅展示mapper映射文件。
新增数据
插入数据的方法sqlSession.insert("mapper映射文件内insert标签的id","传入的参数"),并且例如增删改的方法需要调用commit方法进行提交。
编写sql语句时,如果输入的参数为java对象类型,#{}表示接收java对象的属性名
XML
<insert id="add" parameterType="com.cc.UserMapper" >
insert into tb_userinfo (name,gender,age,address,email,qq) values (#{name},#{gender},#{age},#{address},#{email},#{qq});
</insert>
这里将user对象作为参数传入。
java
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(resourceAsStream).openSession();
//插入数据
User user = new User("张四丰","女",25,"宁夏","1212@qq.com","987654");
sqlSession.insert("add",user);
sqlSession.commit();
删除数据
根据姓名删除数据:调用sqlSession.delete方法,同时传入一个字符串。
sqlSession.delete("delete","张大2");
XML
<delete id="delete" parameterType="String">
delete from tb_userinfo where name = #{na}
</delete>
修改数据
当要传入多个参数时,除了使用类将数据封装起来,还能使用map集合作为参数传入,注意map的key值要和#{}内的值一致。
XML
<update id="update" parameterType="map">
update tb_userinfo set gender=#{gender},address=#{address} where name=#{nam}
</update>
java
Map<String,String> map = new HashMap<>();
map.put("gender","女");
map.put("nam","李思思");
map.put("address","四川");
sqlSession.update("update",map);
查询数据
查询所有
XML
<select id="seleteAll" resultType="com.cc.User">
select * from tb_userinfo;
</select>
java
List<User> users = sqlSession.selectList("seleteAll");
for(User u : users){
System.out.print(u.getName());
System.out.println(u.getAge());
}
条件查询
XML
<select id="seleteByName" resultType="com.cc.User" parameterType="String">
select * from tb_userinfo where name = #{name}
</select>
java
User user = sqlSession.selectOne("seleteByName", "李思思");
System.out.println(user.getGender());
System.out.println(user.getAddress());
模糊查询
XML
<select id="seleteLike" resultType="com.cc.User" parameterType="String">
select * from tb_userinfo where name like #{name}
</select>
java
User o = sqlSession.selectOne("seleteLike", "%大%");
System.out.println(o.getName());
映射文件的相关补充
#{}与${}
#{}与{}都能够接收输入的参数,区别是#{}表示一个占位符号,{}表示一个拼接符号,这样会导致sql注入,因此不建议使用${}
parameterType和resultType
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。