<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 添加依賴 mybatis依賴和msyql連接驅動 ~~~ <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!-- <version>5.1.48</version>--> <version>8.0.18</version> </dependency> <!-- mybatis分頁插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> </dependency> ~~~ # 配置文件 ~~~ # DB配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/app?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root ~~~ ~~~ #在執行查詢后,可以將數據庫的NN\_NN格式字段,在java結果集對象中自動轉換成駝峰命名參數 mybatis.configuration.mapUnderscoreToCamelCase=true ~~~ ~~~ # 打印SQL日志到控制臺 logging.level.你的包名.mybatis接口包=debug ~~~ ~~~ mybatis.type-aliases-package=com.jdxia.model ~~~ # pojo層 ~~~ @Data public class User { private Long id; private String username; } ~~~ # mapper層 ~~~ @Repository @Mapper public interface UserMapper { @Select("select * from user where id = #{id}") public User findById(Long id); } ~~~ `@Mapper`:聲明一個mybatis的dao接口,會被spring boot掃描到 `@Select`:聲明一個查詢方法,相應的增刪改使用`@Insert?@Delete @Update` `List`:返回集合。如果只返回一個結果,返回值是User。如果是增刪改方法返回值是int `User param`:傳參,`#{id}`就是param對象的id值 ## 傳參方式 ### 直接使用 在 SQL 中使? `#{id}` 來接收同名參數 ~~~ @Delete("DELETE FROM users WHERE id =#{id}") void delete(Long id); ~~~ ### 使用@Param 如果你的映射?法的形參有多個,這個注解使?在映射?法的參數上就能為它們取?定義名字。 若不給出?定義名字,多參數則先以 "param" 作前綴,再加上它們的參數位置作為參數別名。例如,`#{param1}`、`# {param2}`,這個是默認值。如果注解是 `@Param("person")`,那么參數就會被命名為 `#{person}`。 ~~~ @Select("SELECT * FROM users WHERE user_sex = #{user_sex}") List<User> getListByUserSex(@Param("user_sex") String userSex); ~~~ ### 使用map 需要傳送多個參數時,可以考慮使? Map ~~~ @Select("SELECT * FROM users WHERE username=#{username} AND user_sex = #{user_sex}") List<User> getListByNameAndSex(Map<String, Object> map); ~~~ 使?時將參數依次加?到 Map 中即可 ~~~ Map param= new HashMap(); param.put("username","aa"); param.put("user_sex","MAN"); List<User> users = userMapper.getListByNameAndSex(param); ~~~ ## 使用對象 在執?時,系統會?動讀取對象的屬性并值賦值到同名的 `#{xxx}` 中 ~~~ @Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passW ord}, #{userSex})") void insert(User user); ~~~ # 啟動處 ~~~ @SpringBootApplication @MapperScan("com.jdxia.mapper") //一定要加這個,這個是mapper(dao)所對應的包路徑 public class BootDemoApplication { public static void main(String[] args) { SpringApplication.run(BootDemoApplication.class, args); } } ~~~ # 控制器層 ~~~ @RestController public class IndexController { @Autowired private UserMapper userMapper; //報紅線不用管,你也可以在他那加個@Repository @GetMapping("/queryUser") @ResponseBody public User queryUser() { User users = userMapper.findById(1L); return users; } } ~~~ # 結果映射 ## 字段映射 `@Results` 如果結果集不是JAVA對象而是Map,map中的列名會和數據庫中的NN\_NN一樣,是不會自動駝峰轉換的。可以使用@Result來指明結果映射,同樣也適用JAVA對象 ~~~ @Results({ @Result(property="nnNn",column="NN_NN") }) @Select("select * from user") public List<Map> findAll(); ~~~ 使用`List<Map>`不用去維護pojo,適于用數據庫字段不確定或經常變化的場景。但是程序的可讀性、可維護性不如`List<User>` --- `user_sex`、`nick_name` 兩個屬性加了下劃線和實體類屬性名不?致,另外 `user_sex` 使?了枚舉,使? @Results 和 @Result 即可解決這樣的問題 ~~~ @Select("SELECT * FROM users") @Results({ @Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class), @Result(property = "nickName", column = "nick_name") }) List<UserEntity> getAll(); ~~~ ## 可復用的`@Results` 聲明時給id賦值為user ~~~ @Results(id="user", value={ @Result(property="nnNn",column="NN_NN") }) ~~~ 在其他 方法中,重復使用id為user的結果映射 `@ResultMap("user")` # 分頁 要在pom.xml中引入分頁插件,分頁邏輯寫在service層 ~~~ @Service @Transactional public class HelloServiceImpl { @Autowired MybatisDao mybatisDao; public void find(){ //分頁插件: 查詢第1頁,每頁10行 Page<User> page =PageHelper.startPage(1, 10); mybatisDao.findAll(); //數據表的總行數 page.getTotal(); //分頁查詢結果的總行數 page.size(); //第一個User對象,參考list,序號0是第一個元素,依此類推 page.get(0); } ~~~ 執行原理:PageHelper.startPage會攔截下一個sql,也就是mybatisDao.findAll()的SQL。并且根據當前數據庫的語法,把這個SQL改造成一個高性能的分頁SQL,同時還會查詢該表的總行數,具體可以看SQL日志。 `PageHelper.startPage`和`mybatisDao.findAll()`最好緊跟在一起,中間不要有別的邏輯,否則可能出BUG。 `Page<User> page`:相當于一個list集合,findAll()方法查詢完成后,會給page對象的相關參數賦值 # 回傳ID 假設數據庫表的ID主鍵是自動增長的,現在添加一條數據,想要得到這條數據自動增長的ID,方法如下 dao層 `useGeneratedKeys=true`:獲取數據庫生成的主鍵 `keyProperty="id"`:把主鍵值存入User param對象的id屬性 ~~~ @Insert("insert into user(name) values(#{name})") @Options(useGeneratedKeys=true,keyProperty="id") public int add(User param); ~~~ service層 ~~~ User user = new User(); user.setName("tom"); mybatisDao.add(user); System.out.println("回傳ID值:"+user.getId()); ~~~ # 存儲過程 這是一個mysql存儲過程,傳入一個id值,根據這個id查詢出name值并且做為傳出參數 ~~~ DELIMITER $$ CREATE PROCEDURE `hello`(IN id_in VARCHAR(10),OUT name_out VARCHAR(10)) BEGIN SELECT NAME INTO name_out FROM USER WHERE id=id_in; END$$ DELIMITER ; ~~~ dao層 mode=IN:傳入參數,就是`user.id` mode=OUT:傳出參數,就是`user.name` StatementType.CALLABLE:說明這是一個存儲過程 ~~~ @Select("call hello(#{id,mode=IN,jdbcType=VARCHAR},#{name,mode=OUT,jdbcType=VARCHAR})") @Options(statementType= StatementType.CALLABLE ) public void call(User user); ~~~ service層 ~~~ public void call(){ User user = new User(); user.setId("14"); mybatisDao.call(user); System.out.println(user.getName()); ~~~
                  <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>

                              哎呀哎呀视频在线观看