1. 对于普通增删改查中,各种标签的使用
接口中的所有方法:
public interface UserDao {
public List<User> getuserList();
public User getUserid(String mname);
public int InsertUser(User user);
public int upadateUser(User user);
public int deleteUser(int id);
}
首先创建Dao层接口的实现类(现在用一个xml配置文件代替)中,<mapper>标签的namespace属性,必须要对应完整的接口路径;
然后再<mapper>标签中就有一些sql相关的语句;
比如查询的时候,使用的就是select标签;其中的id就是指接口的方法名,resultType就是指返回类型;paramterType是指参数类型;如下简单事例:
<mapper namespace="dxs.dao.UserDao">
<!--里面的id就是指方法名;resultType是指返回类型,还可以添加一个parameterType作为参数类型;-->
<select id="getuserList" resultType="dxs.pojo.User" >
select * from testmybatis
</select>
</mapper>
当插入的时候,使用的是<insert>标签,
<insert id="InsertUser" parameterType="dxs.pojo.User">
insert into test.testmybatis(id,Mname,sex,age) value(#{id},#{Mname},#{sex},#{age})
</insert>
测试类:
@Test
public void test2(){
SqlSession sqlSession = null;
try {
//先获取一个sqlsession对象;
sqlSession = MybatisUtils.getSqlSession();
//通过getMapper方法获得接口的对象,然后通过这个对象调用方法;
UserDao userDao = sqlSession.getMapper(UserDao.class);
int num = userDao.InsertUser(new User(3,"玉皇大帝","男",10));
//增删改时需要提交事物;
sqlSession.commit();
System.out.println(num);
} finally {
//最后将连接关闭;
sqlSession.close();
}
}
再修改数据时,使用<update>标签
<update id="upadateUser" parameterType="dxs.pojo.User">
update testmybatis set Mname=#{Mname},age=#{age} where id=#{id}
</update>
测试类:
@Test
public void test3(){
SqlSession sqlSession = null;
try {
//先获取一个sqlsession对象;
sqlSession = MybatisUtils.getSqlSession();
//通过getMapper方法获得接口的对象,然后通过这个对象调用方法;
UserDao userDao = sqlSession.getMapper(UserDao.class);
int num = userDao.upadateUser(new User(3,"二郎神","男",764));
//增删改时需要提交事物;
sqlSession.commit();
System.out.println(num);
} finally {
//最后将流关闭;
sqlSession.close();
}
}
删除使用的标签是<delete>,里面的属性大都是一样的;
<delete id="deleteUser" parameterType="int">
delete from testmybatis where id=#{id}
</delete>
测试类:
@Test
public void test4(){
SqlSession sqlSession = null;
try {
//先获取一个sqlsession对象;
sqlSession = MybatisUtils.getSqlSession();
//通过getMapper方法获得接口的对象,然后通过这个对象调用方法;
UserDao userDao = sqlSession.getMapper(UserDao.class);
int num = userDao.deleteUser(2);
//增删改时需要提交事物;
sqlSession.commit();
System.out.println(num);
} finally {
//最后将流关闭;
sqlSession.close();
}
}
2. 通过Map传输数据
之所以通过Map来传递数据,是有好处的,首先,使用Map传输数据的时候,是键值对,这样传值的时候,mapper.xml(用来实现dao接口的配置文件,专门书写sql语句)里面的sql语句的值就可以直接使用map的键进行书写,不需要刻意的全部相同,毕竟你创建的实体类是和数据库的表相对应的,所有类的属性和表的字段相同;
下面是基本的使用:
先创建一个接口,在接口中设计好方法,然后创建一个配置文件,继承这个方法,并写入sql语句和类型;
配置方法:
<insert id="addMapUser" parameterType="map">
insert into testmybatis(Mname,sex,age) value (#{thisName},#{thisSex},#{thisAge})
</insert>
测试类:
@Test
public void test5(){
SqlSession sqlSession=null;
try {
sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
//后面需要用到Map对象,所以这里可以先创建一个对象;
//之所以第二个参数是Object类型,是因为这样的话就可以将所有的类型传入,不需要固定在单一的类型;
Map<String,Object> map = new HashMap<>();
map.put("thisName", "嫦娥");
map.put("thisSex", "女");
map.put("thisAge", 1322);
int num = mapper.addMapUser(map);
//千万要记得提交事物,除了查不需要,其他的如果不提交,就和没运行一样;
sqlSession.commit();
//返回执行之后的MySQL中受到影响行数;
System.out.println(num);
} finally {
//最后也不要忘了关闭;
sqlSession.close();
}
}
3. 在Mybatis中的模糊查询
SQL注入就是指输入一些非法的参数,然后获取一些不应该获取的数据;
一般情况下,在MyBatis中,所有的输入参数都是可以规定类型的,这样其实就可以规避sql注入;
那么如果需要输入一些通配符的时候该怎么办的?
如下:
下面以模糊 查询作为事例;步骤都是一样的:
第一步:在一个接口中定义模糊查询的方法;
public List<User> getUserLike(String value);
第二步:在一个配置xml文件中通过select标签书写sql语句;id的值就是之前定义的方法;定义resultType为自己需要的类型;像是%这样的通配符最好是直接固定的写出来;
<select id="getUserLike" resultType="dxs.pojo.User">
select * from testmybatis where Mname like "%"#{value}"%"
</select>
第三步:进行测试,看是否可以查询到数据;
@Test
public void test6(){
SqlSession sqlSession=null;
try {
sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> user = mapper.getUserLike("后");
for (User u:user){
System.out.println(u);
}
} finally {
//最后也不要忘了关闭;
sqlSession.close();
}
}
测试的结果是没有错的;可以查询到含有这个字的字段全部信息;