前面的mybatis 入门已经介绍了一些基础的mybatis
现在我们来通过mybatis的代码 实现对数据库的增删改查操作
首先 我们建立的的dao包中 有对数据库操作的持久化代码
dao层中 增删改查代码块的xml 再结合接口与 resource文件下的mybatis-config.xml
实现对数据库执行操作(当然还有测试类 和Util类)
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 接口的路径 建立与接口的连接 面向接口编程 获取了接口 我们就能使用接口的实现类-->
<mapper namespace="com.mumu.dao.DaoMybatis">
<select id="getAllMybatis" resultType="com.mumu.entity.Mybatis">
select * from mybatis.user;
</select>
<!-- 接口中 方法的名字 返回结果类型-->
<select id="getIdMybatis" resultType="com.mumu.entity.Mybatis">
select * from mybatis.user where id=#{id}
</select>
<!-- 接口中 方法的名字 参数类型-->
<insert id="addMybatis" parameterType="com.mumu.entity.Mybatis">
insert into mybatis.user(id, name, pwd) VALUES(#{id},#{name},#{pwd});
</insert>
<delete id="delete" parameterType="com.mumu.entity.Mybatis">
delete from mybatis.user where id=#{id}
</delete>
<update id="update" parameterType="com.mumu.entity.Mybatis">
update mybatis.user set name=#{name} , pwd=#{pwd} where id=#{id}
</update>
<select id="getlike" resultType="com.mumu.entity.Mybatis">
select * from mybatis.user where name like concat('%',#{name},'%')
</select>
<update id="maptest" parameterType="map">
update mybatis.user set name=#{name} where id=#{id};
</update>
<insert id="adduser" parameterType="map">
insert into mybatis.user(id, name, pwd) value(#{id},#{name},#{pwd});
</insert>
</mapper>
注意 模糊查询
或者写成 where name like “%” #{name} “%”
接口代码
package com.mumu.dao;
import com.mumu.entity.Mybatis;
import java.util.List;
import java.util.Map;
public interface DaoMybatis {
//查所有
List<Mybatis> getAllMybatis();
// 根据id查
Mybatis getIdMybatis(int id);
//添加
void addMybatis(Mybatis mybatis);
//删除
void delete(int id);
//修改
void update(Mybatis mybatis);
//模糊查询
List<Mybatis> getlike(String str);
//用map作为参数 来修改
void maptest(Map<String,Object> map);
//用map作为参数来添加
void adduser(Map<String,Object> map);
}
测试类
package com.mumu.dao;
import com.mumu.entity.Mybatis;
import com.mumu.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 UserDaoTest {
@Test
public void test01(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
DaoMybatis mapper = sqlSession.getMapper(DaoMybatis.class);
List<Mybatis> allMybatis = mapper.getAllMybatis();
for (Mybatis user:allMybatis){
System.out.println(user);
}
sqlSession.close();
}
@Test
public void test02(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
DaoMybatis mapper = sqlSession.getMapper(DaoMybatis.class);
Mybatis idMybatis = mapper.getIdMybatis(11);
System.out.println(idMybatis);
sqlSession.close();
}
@Test
public void test03(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
DaoMybatis mapper = sqlSession.getMapper(DaoMybatis.class);
mapper.addMybatis(new Mybatis(12,"迪丽热巴","132456"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void test04(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
DaoMybatis mapper = sqlSession.getMapper(DaoMybatis.class);
mapper.delete(2);
sqlSession.commit();
sqlSession.close();
}
@Test
public void test05(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
DaoMybatis mapper = sqlSession.getMapper(DaoMybatis.class);
mapper.update(new Mybatis(12,"马化腾","123456"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void test06(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
DaoMybatis mapper = sqlSession.getMapper(DaoMybatis.class);
List<Mybatis> getlike = mapper.getlike("马");
for (Mybatis user : getlike){
System.out.println(user);
}
}
@Test
public void test07(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
DaoMybatis mapper = sqlSession.getMapper(DaoMybatis.class);
Map map=new HashMap();
Object s = map.put("name", "王思聪1");
map.put("id",20);
mapper.maptest(map);
sqlSession.commit();
sqlSession.close();
}
@Test
public void test08(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
DaoMybatis mapper = sqlSession.getMapper(DaoMybatis.class);
Map map=new HashMap();
map.put("id",28);
map.put("name","xixsihaha45h");
map.put("pwd","45618989");
mapper.adduser(map);
sqlSession.commit();
sqlSession.close();
}
}
问题点: 用update 修改的时候 必须修改把全部值给写出来(因为传入的是一个对象 也就是new构造器) 那么怎么才能实现 修改部分的属性呢?注意 这个问题在插入add添加处也存在
解决:使用Map 能很好的解决这一问题 用map的(key,value) 结合它的put方法 将需要的对象添加上 可以很方便的修改 或添加部分值
为了方便 我们的数据库相关信息 我们可以用个.properties文件来进行配置
写在resource 文件下
代码
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=0218
而 mybatis-config.xml 的代码
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 核心配置文件-->
<configuration>
<!-- 引入外部配置文件-->
<properties resource="db.properties"/>
<typeAliases>
<package name="com.mumu.entity"/>
</typeAliases>
<!-- default 默认执行的是id为development的配置信息 如果需要换个数据库连接信息 则把此处改为默认的数据库连接信息的 <environment id="development">的id值-->
<environments default="development">
<environment id="development">
<!-- 数据库的事务管理器为JDBC-->
<transactionManager type="JDBC"/>
<!-- 使用的数据源是POOLED 连接池的实现 这种数据源利用了池的概念 避免了创建新的连接实例所需要的多余时间 这是一种并发web应用快速响应流行的方式-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<!-- jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8-->
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mumu/dao/UserMapper.xml"/>
</mappers>
</configuration>