<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # User ~~~ public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address; private static final long serialVersionUID = 7247714666080613254L; ~~~ 下面是代理DAO # 增加 接口 ~~~ public interface IUserDao { /** * 保存用戶 * @param user */ void saveUser(User user); } ~~~ 注意User要有get和set ~~~ <!-- parameterType是參數類型 --> <insert id="saveUser" parameterType="com.jdxia.domain.User"> insert into user(username, address, sex, birthday) values (#{username}, #{address}, #{sex}, #{birthday}) </insert> ~~~ 執行代碼 ~~~ @Test public void testSave() throws IOException { User user = new User(); user.setUsername("mybatis saveUser"); user.setAddress("地址"); user.setSex("男"); user.setBirthday(new Date()); userDao.saveUser(user); //提交事務,不然你看日志Setting autocommit to false on JDBC Connection //可以把這個放在關閉前 sqlSession.commit(); } ~~~ # 更新 接口 ~~~ /** * 更新用戶 * @param user */ void updateUser(User user); ~~~ 配置文件 ~~~ <!-- 更新操作 --> <!-- parameterType是參數類型 --> <update id="updateUser" parameterType="com.jdxia.domain.User"> update user set username = #{username}, address = #{address}, sex = #{sex}, birthday= #{birthday} where id = #{id} </update> ~~~ 執行 ~~~ @Test public void testUpdate() throws IOException { User user = new User(); //如果這一行沒有,他不會添加 user.setId(50); user.setUsername("mybatis updateUser"); user.setAddress("地址111"); user.setSex("男"); user.setBirthday(new Date()); userDao.updateUser(user); } ~~~ # 刪除 接口 ~~~ /** * 刪除用戶 * @param id */ void deleteUser(Integer id); ~~~ 配置文件 ~~~ <delete id="deleteUser" parameterType="integer"> delete from user where id = #{id} </delete> ~~~ 執行 ~~~ @Test public void testDelete() throws IOException { userDao.deleteUser(51); } ~~~ # 查詢 配置文件 ~~~ <!-- 配置查詢所有 --> <select id="findAll" resultType="com.jdxia.domain.User"> select * from user </select> ~~~ 接口(如果寫注解的話,配置要刪掉,SqlMapConfig.xml那也要改) ~~~ /** * 查詢所有操作 * @return List<User> */ //@Select("select * from user") List<User> findAll(); ~~~ 執行 ~~~ List<User> users = userDao.findAll(); for (User user : users) { System.out.println(user); } ~~~ # selectKey * keyProperty: selectKey語句結果應該被設置的目標屬性 * keyColumn: 匹配屬性的返回結果集中的列名稱 * resultType: 結果的類型,mybatis通常可以推算出來,但是為了更加確定寫上也不會有問題 * order: 可以設置為BEFORE或者AFTER.如果設置為BEFORE那么他會首先選擇主鍵,設置keyProperty然后執行插入語句.如果設置為AFTER,那么先執行插入語句,然后是selectKey元素 * statementType: 與前面相同,mybatis支持STATEMENT,PREPARED和CALLABLE語句的映射類型,分別代表PreparedStatement和CallableStatement類型 # 獲取主鍵 ## 方法一 ~~~ insert into user(username, address, sex, birthday) values ('xx', .....); select last_insert_id(); ~~~ 新增用戶后,同時還要返回當前新增用戶id的值,因為id是由數據庫的自動增長來實現的,所以就相當于在新增后將自動增長auto_increment的值返回 **接口** ~~~ /** * 保存用戶 * @param user * @return */ Integer saveUser(User user); ~~~ **配置文件** ~~~ <!-- parameterType是參數類型 --> <insert id="saveUser" parameterType="com.jdxia.domain.User"> <!-- keyProperty代表要返回值的名稱 order:取值為AFTER代表插入后的行為,resultType是返回值類型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select last_insert_id(); </selectKey> insert into user(username, address, sex, birthday) values (#{username}, #{address}, #{sex}, #{birthday}) </insert> ~~~ **執行** ~~~ User user = new User(); user.setUsername("mybatis saveUser"); user.setAddress("地址"); user.setSex("男"); user.setBirthday(new Date()); System.out.println("保存操作之前user: " + user); Integer id = userDao.saveUser(user); System.out.println("保存操作之后user: " + user); System.out.println("id是---" + id); ~~~ 看user前后變化 ~~~ 保存操作之前user: {"id":null,"username":"mybatis saveUser","birthday":"Sat Sep 28 13:18:21 CST 2019","sex":"男","address":"地址"} 保存操作之后user: {"id":55,"username":"mybatis saveUser","birthday":"Sat Sep 28 13:18:21 CST 2019","sex":"男","address":"地址"} ~~~ ## 方法二keyProperty 在mapper中指定keyProperty屬性,示例如下: mybatis用的是`statement.getGenreatedKeys();` `useGeneratedKeys="true"`使用自增主鍵值獲取主鍵策略 keyProperty指定對應主鍵屬性,mybatis獲取到,存到javaBean的那個屬性 ~~~ <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into user(userName,password,comment) values(#{userName},#{password},#{comment}) </insert> ~~~ ?如上所示,我們在insert中指定了keyProperty="userId",其中userId代表插入的User對象的主鍵屬性。 ~~~ public class User { private int userId; private String userName; private String password; private String comment; //setter and getter } ~~~ ~~~ System.out.println("插入前主鍵為:"+user.getUserId()); userDao.insertAndGetId(user);//插入操作 System.out.println("插入后主鍵為:"+user.getUserId()); ~~~ ## oracle獲取自增的主鍵 **里面sql不能帶分號,oracle對書寫有要求** ~~~ <!-- 獲取非自增主鍵的值: Oracle不支持自增;Oracle使用序列來模擬自增; 每次插入的數據的主鍵是從序列中拿到的值;如何獲取到這個值; --> <insert id="addEmp" databaseId="oracle"> <!-- keyProperty:查出的主鍵值封裝給javaBean的哪個屬性 order="BEFORE":當前sql在插入sql之前運行 AFTER:當前sql在插入sql之后運行 resultType:查出的數據的返回值類型 BEFORE運行順序: 先運行selectKey查詢id的sql;查出id值封裝給javaBean的id屬性 在運行插入的sql;就可以取出id屬性對應的值 AFTER運行順序: 先運行插入的sql(從序列中取出新值作為id); 再運行selectKey查詢id的sql; --> <selectKey keyProperty="id" order="BEFORE" resultType="Integer"> <!-- 編寫查詢主鍵的sql語句 --> <!-- BEFORE--> select EMPLOYEES_SEQ.nextval from dual <!-- AFTER: select EMPLOYEES_SEQ.currval from dual --> </selectKey> <!-- 插入時的主鍵是從序列中拿到的 --> <!-- BEFORE:--> insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL) values(#{id},#{lastName},#{email<!-- ,jdbcType=NULL -->}) <!-- AFTER: insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL) values(employees_seq.nextval,#{lastName},#{email}) --> </insert> ~~~ # 為什么能直接寫name,而不用寫`user.name` 因為parameterType中已經提供了屬性所屬的類,所以不要寫對象名. 他通過OGNL表達式來獲取值,把get省略了 ## QVO ~~~ public class QueryVo { private User user; private Integer id; //setter/getter ~~~ **接口** ~~~ List<User> findByNameAndId(QueryVo vo); ~~~ **配置文件** ~~~ <!-- 根據用戶id和name查詢 --> <select id="findByNameAndId" resultType="com.jdxia.domain.User" parameterType="com.jdxia.domain.QueryVo"> <!-- user.username就是OGNL --> select * from user where username like #{user.username} and id = #{id} </select> ~~~ **執行** ~~~ User user = new User(); user.setUsername("%王%"); QueryVo queryVo = new QueryVo(); queryVo.setId(42); queryVo.setUser(user); List<User> res = userDao.findByNameAndId(queryVo); for (User u : res) { System.out.println(u); } ~~~ # 批量操作 一個是foreach標簽 一個是jdbc數據庫連接屬性的`allowMultiQueries=true`,sql要;分割
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看