namespace中的包名要和 Dao/mapper 接口的包名一致!java
選擇,查詢語句;sql
編寫接口數據庫
//根據ID查詢用戶 User getUserById(int id);
編寫對應的mapper中的sql語句安全
<select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User"> select * from mybatis.user where id = #{id} </select>
測試mybatis
@Test public void getUserById() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); }
<!--對象中的屬性,能夠直接取出來--> <insert id="addUser" parameterType="com.kuang.pojo.User"> insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd}); </insert>
<update id="updateUser" parameterType="com.kuang.pojo.User"> update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id} ; </update>
<delete id="deleteUser" parameterType="int"> delete from mybatis.user where id = #{id}; </delete>
注意點:app
<mapper resource="com/loading/dao/UserMapper.xml"/>
CRUD的主要代碼:maven
public interface UserMapper { //查詢所有用戶 List<User> getUserList(); //根據ID查詢用戶 User getUserById(int id); //根據ID刪除用戶 int deleteUserById(int id); //增長用戶 int insertUser(User user); //更新用戶 int updateUser(User user); }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace=綁定一個對應的Dao/Mapper接口--> <mapper namespace="com.loading.dao.UserMapper"> <select id="getUserList" resultType="com.loading.pojo.User"> select * from mybatis.user; </select> <select id="getUserById" resultType="com.loading.pojo.User" parameterType="int"> select * from mybatis.user where id = #{id}; </select> <delete id="deleteUserById" parameterType="int" > /* delete from mybatis.user where id =1;*/ delete from mybatis.user where id = #{id}; </delete> <insert id="insertUser" parameterType="com.loading.pojo.User"> /* insert into mybatis.user (id,name,pwd) values (1,"loading","12345");*/ insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd}); </insert> <update id="updateUser" parameterType="com.loading.pojo.User" > /* update mybatis.user set name = "胡歌", pwd = "12345" where id= 1; */ update mybatis.user set name =#{name}, pwd =#{pwd} where id=#{id}; </update> </mapper>
@Test //增長用戶 public void insertUser(){ //獲取sqlSession對象 SqlSession sqlSession = MybatisUtils.getSqlSession(); try { UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.insertUser(new User(2, "直直", "12345")); if(i>0){ System.out.println("插入用戶成功"); } sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); }finally { sqlSession.close(); } }
假設,咱們的實體類,或者數據庫中的表,字段或者參數過多,咱們應當考慮使用Map!測試
//萬能的Map //使用map增長用戶 int insertUserMap(Map<String,Object> map);
<!--對象中的屬性,能夠直接取出來 傳遞map的key--> <insert id="insertUserMap" parameterType="map"> insert into mybatis.user (id,name,pwd) values (#{userId},#{userName},#{passWord}); </insert>
@Test //使用map插入對象,適合於數據規模較大,須要插入的數據不規整 //或者使用在更新用戶的信息上,不須要所有更新操做等 public void insertUserMap(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map<String, Object> map = new HashMap<String, Object>(); map.put("userId","3"); map.put("userName",""); map.put("passWord","19980812"); int i = mapper.insertUserMap(map); if (i>0){ System.out.println("插入用戶成功"); } sqlSession.commit(); sqlSession.close(); }
Map傳遞參數,直接在sql中取出key便可! 【parameterType="map"】spa
對象傳遞參數,直接在sql中取對象的屬性便可!【parameterType="Object"】code
只有一個基本類型參數的狀況下,能夠直接在sql中取到!
多個參數用Map,或者註解!
模糊查詢怎麼寫?
Java代碼執行的時候,傳遞通配符 % % 比較安全 推薦使用
List<User> userList = mapper.getUserLike("%李%");
在sql拼接中使用通配符! 可能存在sql注意 不安全
<!-- select * from mybatis.user where id like =? select * from mybatis.user where id like =1 or 1=1--> select * from mybatis.user where name like "%"#{value}"%"
3.實現細節
//模糊查詢 List<User> getUserByLike(String name);
<!-- select * from mybatis.user where name like #{name};--> <select id="getUserByLike" resultType="com.loading.pojo.User" > select * from mybatis.user where name like "%"#{name}"%"; </select>
@Test //模糊查詢 根據關鍵字去查詢 public void getUserByLike(){ //獲取sqlSession對象 SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserByLike("直"); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
結果以下: User{id=1, name='直男', pwd='199868'} User{id=2, name='直直', pwd='12345'}