上図に示すように、アイデアには構築する必要があるさらに 7 つの重要なモジュールがあります。
(1) コントローラー パッケージ: SpringMVC について何かを経験または知っている友人は、コントローラーが制御層であることを知っているはずです。コントローラーは、ブラウザーの情報を受信し、関連する情報の送信に応答する場所に相当します。具体的には、コンピューター ネットワーク関連の知識も兼ね備えています。ブラウザでの使い方を理解する 情報を受け取り、その情報にどう応答するか コントローラ制御層で関連するデータ操作を実装します(ここで、大学院生時代の兄に特別な感謝を表したいと思います)長い間 Web プログラミングについて教えてくれて、それは私に大きな利益をもたらしました。皆さんが適切な時間を使えることを願っています。詳細情報と関連ビデオを確認して学習してください);
(2) エンティティ パッケージ: エンティティ クラスここに格納されているのは、単に Java でクラスの作成を学習するのと全く同じで、違いはありません;
(3) マッパーパッケージ:SpringMVC DAO 層(DAO 層(データ アクセス オブジェクト)の永続化層と呼ばれます) )). ここではデータベースを直接操作することができ、通常は 5 番目のパッケージ マッピング パッケージと組み合わせて使用されます;
(4) サービス パッケージ: SpringMVC ビジネス ロジック層で呼び出されるため、ここに格納されているクラスはすべて関連する処理に関連していますビジネス ロジック;
(5) マッピング パッケージ: リソースの下にクラスパスとして配置され、mybatis ファイルが保存されます。現在の SpringBoot は非常に統合されており、多くの構成があるため、ファイルをまとめることができ、mybatis 基盤をあまり持っていない友人でも使用できます。それを学ぶことができます。マッパー パッケージとマッピング パッケージが一緒に使用される理由は、これらがマッピング関係を形成し、データベース ファイルにアクセスするために組み合わせて使用されるためです;
(6) application.yml: グローバルなデフォルト設定ファイルとして、これはプロジェクト全体に適用され、多くの構成情報を統合するために、この構成ファイルは間違いなく不可欠です (ここでの構成ファイルの記述には yaml 言語を使用するのが最適です。記述が比較的単純で明確であるためです);
(7) application-dev.yml : これは特定の環境用の構成ファイルとみなされ、実際のプロジェクトと組み合わせる必要があります。プロジェクト自体が開発環境だけでなく、テストや本番といった一連の環境であるためです。開発を行う場合は、開発環境を使用して application-dev.yml を構成し、テストを行う場合は、テスト環境を使用して application-test.yml を構成し、運用を行う場合は、運用環境を使用して application-dev.yml を構成します。プロ.yml.現時点では開発環境についてのみ説明しているため、構成ファイル application-dev.yml を 1 つだけ使用します。特定の環境構成情報は、使用時に application.yml のデフォルト構成をオーバーライドするため、デフォルト構成のステートメントと環境構成のステートメント間の競合を心配する必要はありません。
すべての Java プログラムにはプログラムの入り口があり、SpringBoot の初期化時に DemoApplication 自体がすでに存在しているため、ここで多くの設定を行う必要はありません。
package com.example.demo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("com.example.demo.mapper") @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
#@SpringBootApplication アノテーション: これは、これが springboot プロジェクトのスタートアップ項目クラスであることを示すために使用されます。目的は、自動構成を有効にすることです (実際には、 Configuration 構成クラスから継承されます。深く理解するには、全員が SpringBoot の原理を分析する必要があります)
●@MapperScan ("com.example.demo.mapper") は、マッパー ファイルをスキャンし、関連するデータベース ファイルに効果的にアクセスします。 URL マッピング (このアノテーションは非常に便利です!)
CREATE TABLE `water` ( `id` int NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `salary` double(10,2) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci;(3) User エンティティ クラスの作成
package com.example.demo.entity; /** * @description: 实体类 * @author: Fish_Vast * @Date: 2021/8/25 * @version: 1.0 */ public class User { private String name; private Integer id; private Double salary; public User() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", id=" + id + ", salary=" + salary + '}'; } }#誰もがよく知っているクラスです。 3 つのプライベート プロパティ、null パラメーター コンストラクター、対応する get メソッドと set メソッド、およびオーバーライドされた toString() メソッドを作成します。ここで注意すべき点は、プロパティを宣言するときは、宣言にラッパー クラスを使用するのが最善であるということです。 #Java の mybatis に関連する読み取りと入力において、なぜ基本的なデータ型ではなくパッケージ化クラスを使用しようとするのでしょうか?
① MySQL ではフィールドに値が割り当てられていない場合、デフォルト値は null ですが、データベースから確認しても null です。対応する Java コードでフィールドが int 型の場合、null は対応できませんint は基本を表すため、int 型に変換します。データ型は基本的な数値のみです。
②エンティティ クラスの属性には、値を割り当てることも、割り当てないこともできます。値を割り当てない場合、デフォルト値が設定されます。たとえば、int のデフォルト値は 0 です。ただし、値を積極的に 0 に設定することと、デフォルトで 0 に設定することは、2 つの異なる概念です。たとえば、クラスのスコア: 0 は、特定の学生のスコアが 0 であることを意味し、null は、学生が試験でスコアを持っていないことを意味します。これらは 2 つの異なる概念です。
package com.example.demo.mapper; import com.example.demo.entity.User; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface UserMapper { //1.通过id查询用户信息 User getUser(int id); //2.通过id删除用户信息 int delete(int id); //3.更改用户信息 int update(User user); //4.插入用户信息 int save(User user); //5.查询所有用户信息 List<User> selectAll(); }
●@Repository,注解它本身的作用便是标注数据访问组件,作为DAO对象,它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。通过这个注解能够报出更多发现不了的错误,更有利于对项目的维护和开发。其实@Repository不在接口上进行注明,我们的程序照样可以运行,因为在我们使用@MapperScan的时候,我们已经将我们的接口交给框架中的代理类,所以即便是我们不写,程序不会报错,只是我们在Service层写明接口的时候,IDEA会给出红色的波浪线。可以这样理解,标注@Repository是为了告诉编译器我将接口注入到了IoC容器了,你不要报错啦~
●相应地,写出增删查改和查询全部信息的五个方法。
<?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"> <mapper namespace="com.example.demo.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.demo.entity.User"> <result column="id" jdbcType="INTEGER" property="id" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="salary" jdbcType="DOUBLE" property="salary" /> </resultMap> <!--查询用户信息--> <select id="getUser" resultType="com.example.demo.entity.User"> select * from water where id = #{id} </select> <!--删除用户信息--> <delete id="delete" parameterType="int"> delete from water where id=#{id} </delete> <!--返回所有用户信息--> <select id="selectAll" resultType="com.example.demo.entity.User"> select * from water </select> <!--增加用户信息--> <insert id="save" parameterType="com.example.demo.entity.User" > insert into water <trim prefix="(" suffix=")" suffixOverrides="," > <if test="id != null" > id, </if> <if test="name != null" > name, </if> <if test="salary != null" > salary, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides="," > <if test="id != null" > #{id,jdbcType=INTEGER}, </if> <if test="name != null" > #{name,jdbcType=VARCHAR}, </if> <if test="salary != null" > #{salary,jdbcType=DOUBLE}, </if> </trim> </insert> <!--根据id更改用户信息--> <update id="update" parameterType="com.example.demo.entity.User"> update water <set > <if test="name != null" > name = #{name,jdbcType=VARCHAR}, </if> <if test="salary != null" > salary = #{salary,jdbcType=DOUBLE}, </if> </set> where id = #{id,jdbcType=INTEGER} </update> </mapper>
●mapper namespace用于绑定mapper接口的,当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句(通过mapper方法名进行绑定);
●resultMap 定义了一个id为BaseResultMap的标识,type代表使用哪种类作为我们所要映射的类;
●
package com.example.demo.service; import com.example.demo.entity.User; import com.example.demo.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * @description: 实现类,对进行相关的业务逻辑 * @author: Fish_Vast * @Date: 2021/8/25 * @version: 1.0 */ @Service public class UserService { @Autowired private UserMapper userMapper; public User getUser(int id){ return userMapper.getUser(id); } public int delete(int id){ return userMapper.delete(id); } public int update(User user){ return userMapper.update(user); } public int save(User user){ return userMapper.save(user); } public List<User> selectAll(){ return userMapper.selectAll(); } }
●这里我特别说明一下,private UserMapper userMapper既可以当做是引用数据类型,也可以作为接口对象进行使用,这里我们当接口对象使用(初次接触的时候肯定对这个会有些许疑问,很正常,因为我当时对于这个接口也纠结了很久哦);
●@Service表示我们在业务逻辑层进行操纵,属于自动配置的环节;
●相应的五个方法,通过对象得到相应返回值给UserMapper接口。
package com.example.demo.controller; import com.example.demo.entity.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.xml.ws.Service; import java.util.List; /** * @description: 控制器,接收并响应相关信息 * @author: Fish_Vast * @Date: 2021/8/25 * @version: 1.0 */ @RestController @RequestMapping("/seven") public class UserController { @Autowired private UserService userService; //通过id得到用户信息 @RequestMapping(value = "/getUser/{id}", method = RequestMethod.GET) public String getUser(@PathVariable int id){ return userService.getUser(id).toString(); } //通过id删除用户信息 @RequestMapping(value = "/delete", method = RequestMethod.GET) public String delete(int id){ int result = userService.delete(id); if(result >= 1){ return "删除成功!"; }else{ return "删除失败!"; } } //更改用户信息 @RequestMapping(value = "/update", method = RequestMethod.GET) public String update(User user){ int result = userService.update(user); if(result >= 1){ return "更新成功!"; }else{ return "更新失败!"; } } //插入用户信息 @RequestMapping(value = "/insert", method = RequestMethod.GET) public int insert(User user){ return userService.save(user); } //查询所有用户的信息 @RequestMapping(value = "/selectAll") @ResponseBody //理解为:单独作为响应体,这里不调用实体类的toString方法 public List<User> listUser(){ return userService.selectAll(); } }
●@RestController注解:就表示我们在控制层模块。控制层是作为SpringMVC最重要的一个环节,进行前端请求的处理,转发,重定向,还包括调用Service方法;
●@RequestMapping注解:处理请求和控制器方法之间的映射关系;
●@ResponseBody注解:将返回的数据结构转换为JSON格式响应到浏览器(这里说得比较笼统,只是简单滴给大家说明一下,水平还不够,认识还不深,不到之处还请见谅!);
●更多的注解解释,还需要大家多去学习一下SpringMVC和SpringBoot,这里面会详细地介绍,在这里我只是做了很粗略的说明而已(本人也是正接触不久,正在努力学习当中)。
(8)配置application.yml文件
spring: profiles: active: dev
●语句很简单,指明我们要使用的开发环境配置文件
#服务器端口配置 server: port: 8081 #数据库配置 spring: datasource: username: 数据库名称 password: 账号密码 url: jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8&nullCatalogMeansCurrent=true&useSSL=true&&serverTimezone=Asia/Shanghai driver-class-name: com.mysql.cj.jdbc.Driver #mybatis配置 mybatis: mapper-locations: classpath:mapping/*.xml type-aliases-package: com.example.demo.entity #showSQL logging: level: com.example.demo.entity: debug
●在开发配置文件当中,我们配置好我们的服务器端口号、数据库的配置、mybatis的配置和如何展示我们的Sql;
●其中要注意的是,数据库的配置中的username和password使用我们安装MySQL数据库时使用的账号名称和密码,url中的3306/紧跟着我们的数据库名称,如果建立的数据库名称不一致,也需要进行修改。
通过以上9个步骤,我们从第(1)个步骤程序入口处点击运行按钮,在浏览器中输入相应指令即可得到不同的展示信息:(到这一步,大概知道为啥要使用@MapperScan注解了吧,可以直接将扫描到的包文件交到代理类中,SpringBoot就是很人性化的框架!)
①查询操作:http://localhost:8081/seven/getUser/1
②删除操作:http://localhost:8081/seven/delete?id=14
③変更操作: http://localhost:8081/seven/update?id=1&name=小まる子&salary=12000
##④挿入操作: http://localhost:8081/seven/insert?id=15&name=Haozi&salary=13000 ⑤すべてのユーザー情報のクエリ: http://localhost:8081/seven /すべて選択############以上がSpringBootの基本的な追加、削除、変更、クエリをJavaで実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。