MyBatis知識點複習-02其他入門操作
下面演示時只給出java代碼和添加在在User.xml裏面的mapper標籤下的關鍵操作代碼,其他的內容參見上篇(本教程是一環一環的,要接着看纔行)
下一篇:MyBatis知識點複習-03Dao與Mapper代理實現
一.模糊查詢操作
[${}]:表示拼接SQL字符串
[${value}]:表示要拼接的是簡單類型參數。
注意:
簡單類型:int,byte,short,long,float,double,char,boolean... String
1、如果參數爲簡單類型時,${}裏面的參數名稱必須爲value(就是這5個字母,不可以改的)
2、${}會引起SQL注入,一般情況下不推薦使用。但是有些場景必須使用${},比如order by ${colname}
User.xml關鍵內容:
<select id="findUserByName" resultType="domain.User" parameterType="String">
select * from user where username like '%${value}%'
</select>
java文件:
package test;
import domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.InputStream;
public class TestUser {
@Test
public void Test(){
//讀取全局配置文件
InputStream resourceAsStream = TestUser.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
//獲取工廠對象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
SqlSession sqlSession = build.openSession();
User findUserByName = (User)sqlSession.selectOne("findUserByName", "張小");
System.out.println(findUserByName);
//關閉SqlSession
sqlSession.close();
}
}
上面因爲查詢張小查詢到了一個數據,如果查詢張有多條數據這時可以用sqlsession.selectList()方法,具體如下:
List<User> findUserByName = (sqlSession.selectList("findUserByName", "張"));
打印如下
二.插入刪除更新操作
接下來爲了方便書寫修改後面的java代碼我都是在Test方法內部的:
package test;
import domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class TestUser {
SqlSession sqlSession;
@Before
public void beforeFun(){
//讀取全局配置文件
InputStream resourceAsStream = TestUser.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
//獲取工廠對象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
sqlSession = build.openSession();
}
@Test
public void Test(){
//代碼放在這
}
@After
public void AfterFun(){
//關閉SqlSession
sqlSession.close();
}
}
注意上面的@After與@Before是在Junit下的,不是其他包下面的,否則會失效
1.插入
清空Test裏的代碼添加下面代碼:
User user = new User();
user.setId(19);
user.setBirthday(new Date());
user.setAddress("北京");
user.setUsername("李成");
user.setSex("男");
//insert的返回值影響的行數
int affectedRwows = sqlSession.insert("insertUser", user);
System.out.println(affectedRwows);
sqlSession.commit();//提交事務,否則會事務回滾
User.xml關鍵內容:
<insert id="insertUser" parameterType="domain.User">
insert into user (id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
</insert>
影響一行
2.刪除
sqlSession.delete("deleteUserByName","李成");
sqlSession.commit();//提交事務,否則會事務回滾
清空Test裏的代碼添加下面代碼:
<delete id="deleteUserByName" parameterType="String">
delete from user where username = #{vale}
</delete>
User.xml關鍵內容:
<delete id="deleteUserByName" parameterType="String">
delete from user where username = #{vale}
</delete>
3.修改
清空Test裏的代碼添加下面代碼:
int update = sqlSession.update("updateUser", "王五");
System.out.println(update);
sqlSession.commit();
User.xml關鍵內容:
<update id="updateUser" parameterType="String">
update user set username = "王六" where username = #{name}
</update>
影響行數:
三.插入自動返回主鍵操作
這個部分我們重用上面的插入的代碼;
清空Test裏的代碼添加下面代碼:
User user = new User();
user.setId(19);
user.setBirthday(new Date());
user.setAddress("北京");
user.setUsername("李成");
user.setSex("男");
//insert的返回值影響的行數
int affectedRwows = sqlSession.insert("insertUser", user);
System.out.println(affectedRwows);
System.out.println(user.getId());
sqlSession.commit();//提交事務,否則會事務回滾
User.xml關鍵內容:
<insert id="insertUser" parameterType="domain.User">
<!--keyProperty爲屬性的名字,在User表中id爲主鍵故填id-->
<!--order爲After表示將語句插入後將得到的id值複製給你傳入的User參數,這裏不要人爲的賦值id不然得到的便是0,同時也不建議使用before因爲得到結果一般不對-->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
</insert>