发表于: 2017-11-19 22:28:08
1 654
今天完成的事情:
①早上补了一下基础的东西,看了一下网络与线程的入门.
写了一个本地的简单servert跑了一下
package basic;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author Arike
* Create_at 2017/11/19 10:52
*/
public class ServertDemo {
static String[] sarr = {"say hello", "I love you", "good night"};
public static void run() throws IOException {
ServerSocket seversocket = new ServerSocket(5000);
while(true){
Socket socket = seversocket.accept();
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.println(geradvice());
writer.println(geradvice());
writer.println(geradvice());
writer.close();
}
}
private static String geradvice() {
return sarr[(int) (Math.random() * sarr.length)];
}
public static void main(String[] args) throws IOException {
ServertDemo t =new ServertDemo();
t.run();
}
}
客户端 client
package basic;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* @author Arike
* Create_at 2017/11/19 11:01
*/
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 5000);
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader br = new BufferedReader(isr);
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
br.close();
}
}
②继续Mybatis的学习,增加CRUD的功能
1.根据用户名称模糊查询用户信息
<mapper namespace="test">
<!-- 省略其他 -->
<!-- 根据用户名称模糊查询用户信息,可能返回多条 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="mybatis.po.User">
select * from user where username like '%${value}%'
</select>
</mapper>
2.添加用户
<mapper namespace="test">
<!-- 省略不相关配置 -->
<!-- 添加用户 -->
<insert id="insertUser" parameterType="mybatis.po.User">
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
<!-- 将插入数据的主键返回,返回到user对象中 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select last_insert_id()
</selectKey>
<!--
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
select uuid()
</selectKey>
-->
</insert>
</mapper>
3.更新和删除
<mapper namespace="test">
<!-- 省略不相关配置 -->
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
<!-- 更新用户 -->
<update id="updateUser" parameterType="mybatis.po.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update></mapper>
增删改查汇总一下:
<?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="mapper">
<select id="getStudentById" parameterType="long" resultType="Student">
select * from `t_student` where id = #{id}
</select>
<select id="getStudentByName" parameterType="String" resultType="Student">
SELECT * FROM `t_student` WHERE name like #{name}
</select>
<update id="updateStudent" parameterType="Student">
UPDATE `t_student` SET name = #{name},age = #{age} WHERE id = #{id}
</update>
<insert id="insertStudent" parameterType="Student">
INSERT INTO `t_student`(name,age)VALUES (#{name},#{age})
<!-- 将插入数据的主键返回,返回到user对象中 -->
<selectKey keyProperty="id" order="AFTER" resultType="long">
select last_insert_id()
</selectKey>
</insert>
<delete id="deleteStudent" parameterType="long">
DELETE FROM `t_student` WHERE id=#{id}
</delete>
</mapper>
测试类:
package com.Mybatis;
import com.Mybatis.bean.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.Reader;
import java.util.List;
/**
* @author Arike
* Create_at 2017/11/20 9:38
*/
public class Test {
//声明SQL语句工厂对象
private static SqlSessionFactory sqlSessionFactory;
//声明reader
private static Reader reader;
//声明执行对话对象
private static SqlSession sqlsession;
static {
try {
reader = Resources.getResourceAsReader("config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
sqlsession = sqlSessionFactory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//selectone(39);
//delete(40);
//update(new Student(40L,"古尘",15));
insert(new Student("剑飞",19));
// selectAll("剑_");
}
//增加
private static void insert(Student student) {
sqlsession.insert("mapper.insertStudent", student);
sqlsession.commit();
sqlsession.close();
System.out.println("本次数据ID为"+student.getId());
}
//通过名称模糊查询
private static void selectAll(String s ) {
List<Student> list = sqlsession.selectList("mapper.getStudentByName",s );
System.out.println(list);
sqlsession.close();
}
//更新
private static void update(Student s) {
sqlsession.update("mapper.updateStudent", s);
sqlsession.commit();
sqlsession.close();
}
//删除
private static void delete(long id){
sqlsession.delete("deleteStudent",id);
sqlsession.commit();
sqlsession.close();
}
//根据ID查找
private static void selectone(long id){
Student s =sqlsession.selectOne("getStudentById", id);
System.out.println(s);
sqlsession.close();
}
}
关于insert在XML中有可以返回主键ID语句
<selectKey keyProperty="id" order="AFTER" resultType="long">
select last_insert_id()
</selectKey>
4 <selectKey>标签:用来返回插入数据的主键的,实际中如果有获得主键的需要就可以使用它。
5 select last_insert_id():是sql函数,表示得到刚刚insert进去记录的主键值,只适用于自增主键。
6 keyProperty:表示将查询到主键值设置到上面parameterType指定的对象的哪个属性。
7 order:表示select last_insert_id()的执行顺序,是相对于insert语句来说的。
明天计划的事情:
继续Mybatis动态SQL的学习,以及log4j的了解.
遇到的问题:
对XML里面的很多的定义还是搞不清楚,
<mapper namespace="test">
这个mapper namespace 定义的作用还不是很清楚,查看了一波资料,说的是直接写DAO接口,可以不用写实现类,但是我这边是直接将mapper.XML去掉.XML写进去,不然就会一直报错
收获:
了解到了简单网络端口连接的写法,会在Mybatis中使用CRUD.
禅道:http://task.ptteng.com/zentao/project-burn-414.html
评论