这里的意思是定义一个语句或者语句片段,id是UserSqlOne,在下面select语句中加入 include refid="UserSqlOne"就可以直接使用定义的语句片段
8.where和if的用法
以下代码意思就是select * from t_user,然后传值user不是空,就在sql语句后面加上,where user=传值的user,如果user是空,sql语句就是select * from t_user。满足if条件就加上后续语句,where的作用是去掉没有用的or或者and,做到高容错。
9.foreach使用
传值为list《String》集,在xml中list表示传过来的值为list集,item是遍历每一个元素的值,比如下面java代码传过来的值就是[123, 123456, 1234566, 1234562],item就是123.123456.1234566.1234562,所以sql语句就是select * from t_user where `user` in ( 123.123456.1234566.1234562 ) ,separator是分隔符,open和close是开始和结束标志符。
//接口操作student表
public interface UserDao {
//查询student表的所有的数据
public List selectUsers();
public List selectAllUuser();
public List selectAllUuser1();
public List selectLike(String user);
public List selectForIf(User user);
public List selectFirstIf(User user);
public List selectForeachOne(List userList);
//插入方法
//参数: student ,表示要插入到数据库的数据
//返回值: int , 表示执行insert操作后的 影响数据库的行数
public int insertUser(User user);
public User selectByUser(String user);
public List selectMultiPara(@Param("myUser") String user,@Param("myKey") String key);
public int selectForObject(User user);
public List selectOrder(@Param("colName") String colName);
}
SELECT * from t_user where `user`=#{myUser} or `key`=#{myKey}
public List selectMultiPara(@Param("myUser") String user,@Param("myKey") String key);
3.使用一个对象作为参数
xml里面的#{user}和#{key}的user和key,必须和User类里面的数据名一致
SELECT count(*) from t_user where`user`=#{user} or `key`=#{key}
public int selectForObject(User user);
4.查询以某一项数据进行排序的数据
SELECT * from t_user order by ${colName}
public List selectOrder(@Param("colName") String colName);
5.ResultMap自定义返回数据类型
select `user` AS SIUSER,`key` AS SIKEY from t_user
public List selectAllUuser();
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
List userList = dao.selectAllUuser();
for(User user : userList)
{
System.out.println(user);
}
sqlSession.close();
select * from t_user where `user` like "%" #{myuser} "%"
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
List userList = dao.selectLike("123");
for(User user : userList)
{
System.out.println(user);
}
sqlSession.close();
第二种方法,在传参中用数据连接加入前后的%
select * from t_user where `user` like #{myuser}
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
String sql = "%"+"123"+"%";
List userList = dao.selectLike(sql);
for(User user : userList)
{
System.out.println(user);
}
sqlSession.close();
7.xml里面定义sql语句,可以做到代码复用
这里的意思是定义一个语句或者语句片段,id是UserSqlOne,在下面select语句中加入 include refid="UserSqlOne"就可以直接使用定义的语句片段
`user`,`key`
select from t_user
8.where和if的用法
以下代码意思就是select * from t_user,然后传值user不是空,就在sql语句后面加上,where user=传值的user,如果user是空,sql语句就是select * from t_user。满足if条件就加上后续语句,where的作用是去掉没有用的or或者and,做到高容错。
select * from t_user
user= #{user}
这里的user是一个数据类,类里面有个user数据,一般都是传类过去。
public List selectForIf(User user);
9.foreach使用
传值为list《String》集,在xml中list表示传过来的值为list集,item是遍历每一个元素的值,比如下面java代码传过来的值就是[123, 123456, 1234566, 1234562],item就是123.123456.1234566.1234562,所以sql语句就是select * from t_user where user in ( 123.123456.1234566.1234562 ) ,separator是分隔符,open和close是开始和结束标志符。
select * from t_user where `user` in
#{user}
public List selectForeachOne(List userList);
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
List users = new ArrayList();
users.add("123");
users.add("123456");
users.add("1234566");
users.add("1234562");
List userList = dao.selectForeachOne(users);
for(User user : userList)
{
System.out.println(user);
}
sqlSession.close();
foreach传list《User》集,其他代码不变,在xml和java代码里面稍微修改
where id in (
#{stu.id},
-1 )
SqlSession sqlSession = MyBatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List stuList = new ArrayList<>();
Student s1 = new Student();
s1.setId(1002);
s1.setName("lisi");
stuList.add(s1);
s1 = new Student();
s1.setId(1005);;
s1.setName("zs");
stuList.add(s1);
List students = dao.selectForeachTwo(stuList);
for(Student stu:students){
System.out.println("foreach--two ==="+stu);