CRUD
1、namespace命名空間
- namespace 中的包名要和介面中的一致,全路徑,
<mapper namespace="com.liu.dao.UserMapper">
操作陳述句…………
</mapper>
2、select選擇,查詢陳述句
- id:就是對應的namespace中的方法名;
- rusultType:sql陳述句執行的回傳值;
- parameterType:引數型別;
(1)撰寫介面
//通過id查詢用戶
User getUserById(int id);
(2)撰寫對應的mapper中的sql陳述句
<select id="getUserById" parameterType="int" resultType="com.liu.enity.User">
select * from mybatis.user where id = #{id}
</select>
(3)測驗(注意:增刪改必須要提交事務,sqlSession.commit() ; )
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userById = mapper.getUserById(1);
System.out.println(userById);
sqlSession.close();
}
3、insert插入資料
<insert id="addUser" parameterType="com.liu.enity.User">
insert into mybatis.user(id,name,pwd) value (#{id},#{name},#{pwd})
</insert>
4、update更新資料
<update id="updateUser" parameterType="com.liu.enity.User">
update mybatis.user set name = #{name},pwd = #{pwd} where id = #{id}
</update>
5、delete洗掉資料
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id = #{id}
</delete>
特別注意點:增刪改一定要提交事務(在測驗類中)才可以成功,
例:
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userById = mapper.getUserById(1);
System.out.println(userById);
//提交事務
sqlSession.commit();
sqlSession.close();
}
6、分析錯誤
- 標簽匹配問題
- resources系結mapper,需要使用路徑,使用(/),不能用(.)
- 程式組態檔必須符合規范
- NullPointerException,沒有注冊到資源
- 輸出的xml檔案中,存在中文亂碼問題
- maven資源沒有匯出問題:在pom檔案中加入build標簽
SQL片段:(將公用的sql提出來用來公用),通過include參考到需要的地方,
但是不推薦使用
<sql id="stuColumn">sid ,sname,sex</sql>
<select id = "search" resultType="student">
select
<include refid="stuColumn"/> from student where sname……
</select>
7、使用Map(多個引數)
方法一:假設,我們的物體類,或者資料庫中的表,欄位或者引數過多,我們應該考慮用Map
//使用Map插入一個用戶
int addUser2(Map<String,Object> map);
<insert id="addUser2" parameterType="map">
insert into mybatis.user (id,name,pwd) value (#{userId},#{userName},#{password})
</insert>
//使用Map插入資料
@Test
public void testAddUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("userId",5);
map.put("userName","客行");
map.put("password","0510");
mapper.addUser2(map);
sqlSession.commit();
sqlSession.close();
}
-
Map傳遞引數,直接在sql中取出key即可!【parameterType=“map”】
-
物件傳遞引數,直接在sql中取出屬性即可!【parameterType=“Object”】
-
只有一個引數的情況下,可以直接在sql中取出!
-
多個引數用Map,或者注解
方法二:物體類物件傳參
@org.junit.Test
public void select() {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
Student student = new Student();
student.setId(1);
Student select = sqlSession.selectOne("select", student);
System.out.println(select);
} catch (Exception e) {
e.printStackTrace();
}
}
<select id="select" resultType="com.liu.pojo.Student">
select * from student where id = #{id}
</select>
8、模糊查詢
方式一:java代碼執行時,傳遞通配符(%,%)
//模糊查詢
List<User> getUserList2(String value);
<select id="getUserList2" resultType="com.liu.enity.User">
select * from mybatis.user where name like #{value}
</select>
//模糊查詢
@Test
public void getUserList(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList2("%老%");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
方式二:在sql中拼接使用通配符
<select id="getUserList2" resultType="com.liu.enity.User">
select * from mybatis.user where name like "%"#{value}"%"
</select>
好了,Mybatis的增刪改查以及拓展內容的分享到這里就結束了,希望可以對大家有幫助,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/274096.html
標籤:其他
