【Android免費音樂下載app】【佳語音樂下載】建議最少2.0.3版本。最新版本:
https://gitlab.com/gaopinqiang/checkversion/raw/master/Music_Download.apk
1、配置mybatis數據庫連接的時候需要加上 【&serverTimezone=GMT%2b8】這個字段,否則會連接不上數據庫
com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_31]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_31]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_31]
at java.lang.reflect.Constructor.newInstance(Constructor.java:408) ~[na:1.8.0_31]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2120) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2143) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1310) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:869) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:831) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197) ~[mysql-connector-java-8.0.20.jar:8.0.20]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.3.jar:na]
2、映射mapper的xml路徑問題,分3種情況
-
a.【不需要配置mybatis.mapper-locations】如果mapper的xml路徑和java代碼路徑一致,則需要把xml放到resources目錄中就可以
mapper的java代碼包路徑 : com.example.mybatis.mapper mapper的resources中xml文件包路徑:com.example.mybatis.mapper
-
b.【需要配置mybatis.mapper-locations】如果mapper.xml的路徑和java代碼中的mapper接口路徑不一致,就需要配置
mapper的java代碼包路徑 :com.example.mybatis.mapper mapper的resources中xml文件包路徑:com.example.mybatis.xml 這個時候就需要在application.properties中配置 #編譯的時候會自動在/target/classes/com/example/mybatis/xml/下存放對應的xml mybatis.mapper-locations=classpath:com/example/mybatis/xml/*.xml
-
c.【不需要配置mybatis.mapper-locations】mapper的xml和代碼都放在java同級目錄
如果mapper的xml文件和接口文件放在一個文件夾下com.example.mybatis.mapper,就不需要配置mybatis.mapper-locations 了。 但是需要在pom.xml的build中配置resources,否則編譯的時候xml拷貝不到target中,出現找不到mapper.xml的情況。
3、mybatis的xml配置中的namespace設置
java中的StudentMapper不一定要對應這StudentMapper.xml這個文件(文件名稱可以修改,比如可以寫成test.xml),但是xml內容中的namespace一定要對應上。
例如:
StudentMapper.xml
<mapper namespace="com.example.mybatis.mapper.StudentMapper"><!--對應的是Mapper接口-->
<select id="getStudent" resultType="java.util.HashMap">
select
*
from
t_person
</select>
</mapper>
或者寫成
test.xml (對文件名稱沒有要求)
<mapper namespace="com.example.mybatis.mapper.StudentMapper"><!--對應的是Mapper接口-->
<select id="getStudent" resultType="java.util.HashMap">
select
*
from
t_person
</select>
</mapper>
所以爲了書寫規範,建議把Mapper的名稱和xml的名稱一樣。
4、mybatis中mapper的xml參數傳遞注意(分2種情況)
- a.當Mapper中只有一個參數時,xml的參數名稱可以隨便填寫,#{}只是個佔位符,將#{}替換爲StudentMapper接口傳過來的參數
例如
StudentMapper.java:
@Mapper
public interface StudentMapper {
List<Map<String, Object>> getStudent(String id);
}
StudentServiceImpl.java:
@Override
public List<Map<String, Object>> getStudent(String id) {
return studentMapper.getStudent(id);
}
StudentMapper.xml:
<mapper namespace="com.example.mybatis.mapper.StudentMapper"><!--對應的是Mapper接口-->
<select id="getStudent" resultType="java.util.HashMap">
select
*
from
t_person
where id = #{a} <!--這個裏面可以隨便填寫 a , b , c 都行,爲了規範和接口保持一致比較好,寫id-->
</select>
</mapper>
截圖如下:
如果參數加了@Param(value=“id”)限定,那麼就不能隨意使用a b c名稱了。需要使用value值
- b.當Mapper中有多個參數時,xml的參數名稱就需要對應
例如
StudentMapper.java:
@Mapper
public interface StudentMapper {
List<Map<String, Object>> getStudent(String id,String name);
}
StudentServiceImpl.java:
@Override
public List<Map<String, Object>> getStudent(String id) {
return studentMapper.getStudent(id,"qiang");
}
StudentMapper.xml:
<mapper namespace="com.example.mybatis.mapper.StudentMapper"><!--對應的是Mapper接口-->
<select id="getStudent" resultType="java.util.HashMap">
select
*
from
t_person
where id = #{a} and name = #{b}
<!--如果這裏面隨便填寫 a , b就會出現異常-->
</select>
</mapper>
請求就會報異常
“org.apache.ibatis.binding.BindingException: Parameter ‘a’ not found. Available parameters are [name, id, param1, param2]”
截圖如下:
所以我們修改爲:where id = #{id} and name = #{name} 就能正常請求了。輸出:[{name=qiang, location=china, id=1, age=30}]
如果修改爲:where id = #{name} and name = #{id},輸出爲:[]
所以可以看到,#{name}對應的是參數name,#{id}對應的是參數id
當然我們除了用id和name , 我們也可以用 param1和param2,也是正常的。
爲了規範填寫,我們可以在Mapper的形參使用@Param加限定。例如:
StudentMapper.java:
@Mapper
public interface StudentMapper {
List<Map<String, Object>> getStudent(@Param("id") String id, @Param("name") String name);
}
5、mybatis中的resultType和resultMap的區別
參考網址:https://www.cnblogs.com/coder-lzh/p/8960928.html
resultMap要更強大一些 ,可自定義。因爲resultMap要配置一下,表和類的一一對應關係,所以說就算你的字段名和你的實體類的屬性名不一樣也沒關係,都會給你映射出來
下面演示個使用resultMap的示例
StudentMapper.xml:
<?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.mybatis.mapper.StudentMapper"><!--對應的是Mapper接口-->
<!--type就是自定義的bean類;column就是數據庫的字段(如果設置錯了會導致這個字段沒有值,但不會報錯);property就是bean類中的屬性字段-->
<resultMap id="MyMap" type="com.example.mybatis.model.Student">
<result column="id" property="id" />
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="location" property="location" />
</resultMap>
<select id="getStudent1" resultMap="MyMap">
select
*
from
t_person
where id = #{id}
</select>
</mapper>
Student.java:
package com.example.mybatis.model;
public class Student {
private int id;
private String name;
private int age;
private String location;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", location='" + location + '\'' +
'}';
}
}
請求測試:http://localhost:8080/getStudent1
響應數據:[Student{id=1, name=‘qiang’, age=30, location=‘china’}]
6、mybatis的反向工程
generatorConfig.xml 默認放在resources下面,就不用在pom中配置文件路徑了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry location="D:\WMOS_Server\apache-maven-3.2.1-bin\repo\mysql\mysql-connector-java\5.1.38/mysql-connector-java-5.1.38.jar"></classPathEntry>
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">-->
<!-- <property name="searchString" value="[e|E]xample$" />-->
<!-- <property name="replaceString" value="Criteria" />-->
<!-- </plugin>-->
<commentGenerator>
<property name="suppressDate" value="true" />
</commentGenerator>
<!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/study"
userId="root"
password="root">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- generate Model -->
<javaModelGenerator targetPackage="com.example.mybatis.model"
targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="false" />
</javaModelGenerator>
<!-- 自動生成xml(但是好像一直沒有生成功,反正也不用xml) -->
<sqlMapGenerator targetPackage="com.example.mybatis.mapper"
targetProject="src/main/resources">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 自動生成mapper接口, 可以是 ANNOTATEDMAPPER(註解), XMLMAPPER(xml), MIXEDMAPPER(不知道) -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mybatis.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<table tableName="t_person"></table>
</context>
</generatorConfiguration>
pom的build標籤配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--添加mybatis逆向工程-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<configuration>
<!-- <configurationFile>generatorConfig.xml</configurationFile>-->
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
點擊maven生成
這樣就可自動生成Mapper接口和xml文件了。可以減少開發工作量