发表于: 2018-04-04 23:52:41
1 686
今天完成的事情:
1.解决服务器数据库插入中文显示问号的问题
2.写完批量插入,查询
3.配置maven插件,打包项目,运行jar,并在服务器运行main
4.学习基础数组和数组的内存控制
1.关于数据库插入中文是问号的原因:
character_set_server 和 character_set_database 为latinl
之前插入数据查询出来中文字符串是问号,但是其它字符串没影响:
使用show variables like 'character%'查询:

修改:
然后连接的时候url添加:
jdbcUrl = jdbc:mysql://119.29.17.188/jnshu?useUnicode=true&characterEncoding=UTF-8
再次执行可以了,插入后查出来结果正确(第五条):
[Person{id=1, create_at=20180330, update_at=20180330, name='大师兄', age=22, sex=1, tell=138, qq=138, email='11@QQ.COM', pro='NICAI', waikey='null'},
Person{id=2, create_at=0, update_at=0, name='???', age=22, sex=1, tell=135000, qq=23896235, email='7799@12.com', pro='????', waikey='null'},
Person{id=3, create_at=0, update_at=0, name='小师弟', age=15, sex=1, tell=0, qq=0, email='null', pro='二师兄', waikey='null'},
Person{id=4, create_at=0, update_at=0, name='???', age=22, sex=1, tell=138000, qq=8342657, email='7788@12.com', pro='????????', waikey='null'},
Person{id=5, create_at=0, update_at=0, name='三师兄', age=22, sex=1, tell=138000, qq=8342657, email='7788@12.com', pro='巅峰的世界你不懂', waikey='null'}]
2.完善增删改查
interface Mapper:
@Component
public interface PersonMapper {
// @Select("SELECT * FROM person")
public List<Person> findAll();
// @Select(" SELECT * FROM person WHERE id = #{id}")
// @ResultMap("personMap")
Person selectById(int id);
// @Update("Update person SET name=#{name},age=#{age},sex=#{sex},tell=#{tell},qq=#{qq},email=#{email},pro=#{pro},waikey=#{waikey} WHERE id=#{id}")
void updatePerson(Person person);
// @Delete("DELETE FROM person WHERE id = #{id}")
void delectPerson(int id);
// @Insert("INSERT INTO person (id,create_at,update_at,name,age,sex,pro,tell,qq,email,waikey) values (#{id},#{create_at},#{update_at},#{name},#{age},#{sex},#{pro},#{tell},#{qq},#{email},#{waikey})")
void insertPerson(Person person);
// @Insert("INSERT INTO person (id,create_at,update_at,name,age,sex,pro,tell,qq,email,waikey) values (#{id},#{create_at},#{update_at},#{name},#{age},#{sex},#{pro},#{tell},#{qq},#{email},#{waikey})")
void createPerson(Person person);
void insertPersonList(List<Person> list);
}
@Service(不使用sqlSessionDaoSupport访问session可以不用):
@Service
public class PersonService extends SqlSessionDaoSupport implements PersonMapper{
@Autowired
public void setSessionFactory(SqlSessionFactory sqlSessionFactory){
super.setSqlSessionFactory(sqlSessionFactory);
}
public Person selectById(int id) {
/**
* *从语句键和参数中检索单个行。
* statement :mapper.xml里的 namespace
* @param <T>返回的对象类型。
* @param语句唯一标识符匹配使用的语句。
* @param参数一个参数对象传递到语句。
* @return映射对象
* <T> T selectOne(String statement, Object parameter);
*/
return this.getSqlSession().selectOne("mybatis.mapper.PersonMapper.selectById",id);
}
public List<Person> findAll() {
return this.getSqlSession().selectList("mybatis.mapper.PersonMapper.findAll");
}
public void updatePerson(Person person) {
this.getSqlSession().update("mybatis.mapper.PersonMapper.updatePerson",person);
}
public void delectPerson(int id) {
this.getSqlSession().delete("mybatis.mapper.PersonMapper.delectPerson",id);
}
public void insertPerson(Person person) {
this.getSqlSession().insert("mybatis.mapper.PersonMapper.insertPerson",person);
}
public void createPerson(Person person) {
this.getSqlSession().insert("mybatis.mapper.PersonMapper.createPerson",person);
}
public void insertPersonList(List<Person> list) {
this.getSqlSession().insert("mybatis.mapper.PersonMapper.insertPersonList",list);
}
}
mapper的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="mybatis.mapper.PersonMapper">
<resultMap id="personMap" type="mybatis.model.Person" >
<id column="id" property="id"/>
<result column="create_at" property="create_at"/>
<result column="update_at" property="update_at"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="sex" property="sex"/>
<result column="pro" property="pro"/>
<result column="tell" property="tell"/>
<result column="qq" property="qq"/>
<result column="email" property="email"/>
<result column="waikey" property="waikey"/>
</resultMap>
<!--命名sql语句 可以在下面调用,在这标注可以有这种引用方式-->
<!--<sql id="person_column">-->
<!--id,create_at,update_at,name,age,sex,tell,qq,email,pro,waikey-->
<!--</sql>-->
<!-- 要么是resultMap="userMap" 要么是resultTpye="int" -->
<select id="selectById" parameterType="int" resultMap="personMap" >
SELECT * FROM person WHERE id = #{id}
</select>
<select id="findAll" parameterType="mybatis.model.Person" resultMap="personMap">
SELECT * FROM person
</select>
<insert id="insertPerson" parameterType="mybatis.model.Person" useGeneratedKeys="true" >
INSERT INTO person
(id,create_at,update_at,name,age,sex,pro,tell,qq,email,waikey)
values
(#{id},#{create_at},#{update_at},#{name},#{age},#{sex},#{pro},#{tell},#{qq},#{email},#{waikey})
</insert>
<insert id="createPerson" parameterType="mybatis.model.Person" useGeneratedKeys="true" >
INSERT INTO person
(id,create_at,update_at,name,age,sex,pro,tell,qq,email,waikey)
values
(#{id},#{create_at},#{update_at},#{name},#{age},#{sex},#{pro},#{tell},#{qq},#{email},#{waikey})
</insert>
<insert id="insertPersonList" parameterType="mybatis.model.Person" useGeneratedKeys="true">
INSERT INTO person(id,create_at,update_at,name,age,sex,pro,tell,qq,email,waikey)
values
<foreach item="item" collection="list" separator="," index = "index">
(#{item.id},#{item.create_at},#{item.update_at},#{item.name},#{item.age},#{item.sex},#{item.tell},#{item.qq},#{item.email},#{item.pro},#{item.waikey})
</foreach>
</insert>
<update id="updatePerson" parameterType="mybatis.model.Person" >
Update person SET name=#{name},age=#{age},sex=#{sex},tell=#{tell},qq=#{qq},email=#{email},pro=#{pro},waikey=#{waikey} WHERE id=#{id}
</update>
<delete id="delectPerson" parameterType="int" >
DELETE FROM person WHERE id = #{id}
</delete>
</mapper>
main方法(这里只贴了简单的main方法,MybatisAction是本测试类的类名):
public static void main(String[] args){
ApplicationContext conn = new ClassPathXmlApplicationContext("mybatis/springmybatis.xml");
MybatisAction mybatisAction = (MybatisAction) conn.getBean("mybatisAction");
System.out.print("\n ==================================== \n" + mybatisAction.personMapper.findAll() + "\n ==================================== \n");
}
3.使用插件打包
使用的插件:
<!--assembly打包插件-->
maven-assembly-plugin
<!--依赖包复制到库 插件-->
maven-dependency-plugin
<!--编译插件 compiler-->
maven-compiler-plugin
<!--还有一个maven-jar-plugin 打包插件-->
maven-jar-plugin
执行mvn -package打包命令后,在target目录下生成jar包
但是在插件里写的main方法类无法加载:
<manifest>
<mainClass>action.MybatisAction</mainClass>
</manifest>
java运行jar包提示找不到主函数入口。
使用idea打包可以运行:
把jar包上传后在服务器(CentOs)运行:
4.数组的内存控制
List<User> list = new ArrayList(); 严格说是对象而不是数组
数组也是存放在堆内存中,引用数组的变量存放在栈内存中。局部变量也是,存放在栈内存中,一旦使用完毕立即释放内存。
数组的长度是不变的,一旦初始化之后它的长度就被定义了,固定不变。数组被定义以后会在内存中开辟两个空间,一个存放实际数组本身(在堆内存中),一个存放指引变量(在栈内存中)。所以我们每次看待数组的时候都要把它想成两个部分,一个是引用它的变量,一个是它本身。
当定义一个数组的时候,只是创建了一个空的引用,并没有开辟它的真实内存。只有当它初始化的时候才会在内存开辟空间,此时它的长度已经被定义下来了。
比如
int[] list;
它就是一个空引用,没有实际的指向地址。
使用数组的时候必须初始化,或者,给它一个指向已经初始化的数组的内存地址。由此也可以知道所有的引用对象都是,可以不用进行初始化,需要初始化的是它实际的在堆内存里的对象本身,我们使用它们的时候都是通过引用变量来使用它们,我们更改引用变量的值的时候,实际上就是更改了它指向的地址,原来的对象本身还是在内存中不变。如果这个对象没有引用变量引用的时候就变成了垃圾数据,这就需要回收机制把它回收释放内存。
数组是静态的,它占的内存不变。实际上java就是静态语言,数据存放在内存里,数据对象都是在来回的调用、引用,它本身不变,java不允许直接访问堆内存中的数值。
数组的初始化分为静态和动态
静态初始化就是我们定义它的时候直接赋初始值,系统就会自动为它分配内存,定义长度;
动态初始化就是我们只定义它的长度,而不赋值,系统为它的内容赋初始值。
当动态初始化的时候,系统是默认按照它的基本类型定义初始值:
int等整数类型赋值0;
float、double是0.0;
字符类型赋值是'\u000';
boolean是false;
引用类型就赋值是null。
多维数组,严格来说并不算多维数组
比如定义一个数组:int[ ][ ] a = new int[ 3 ][ ];
a[ 0 ][ ] = new int[ 2 ];
这里a是一个二维数组,它里面储存的new int[]也是一个数组,但是这里储存的只是一个引用对象,java可以把多维数组当成一维数组处理。初始化的时候可以从左边初始化a的第一个元素,现在它是个数组,储存在a数组里的是引用变量而不是这个数组本身,但是这个引用变量会作为a数组的元素储存在堆内存之中。然后再初始化这个数组的元素,如果还是数组就一直迭代下去,直到可以初始化的值(就是在堆内存中的实际对象),然后再继续下一个。这样就是一直引用下去,直到所有的引用类型向下迭代到内存里初始化的实际对象。
明天计划的事情:
1.测试服务器数据池连接,学习try/catch
2.继续学习java基础
遇到的问题:
1.更改服务器数据库编码并重启的时候遇到问题,无法重启。再次连接无法连接上,还是之前提示的‘没有.sock文件,不能连接数据库’
只能再执行一次mysqld --user=root;解决
2.使用插件打包的时候class main路径的问题,无论写什么都找不到主函数入口。使用idea打包则可以解决,但是查看mf文件,主函数指定的地址和使用插件打包的一样。
3.多维数组,既然a里面的数组作为a数组的元素储存在堆中,那栈中还会储存这些作为元素的数组的引用变量么。是相当于a数组的引用变量储存在栈中,它指向的数组对象储存在堆中。其中的元素指向new数组,这些数组的引用变量在栈中,但是作为a的元素这些引用变量又会储存在堆中,还是说不会在栈中开辟新空间储存这些数组元素的引用变量了?
收获:
1.打包运行
2.数据库本身的查询
3.数组的内存空间
评论